строка соответствия регулярного выражения Python, содержащая числа после строки с цифрой в конце - PullRequest
1 голос
/ 28 июня 2019

Я записываю текст в файл с помощью регулярных выражений, но строка содержит ошибочную цифру.Я фиксирую без него, но при попытке захватить следующую строку, он возвращает только строку, а не следующую строку.Я могу перехватить его, когда нет ошибочной завершающей цифры.

Я пробовал много комбинаций регулярных выражений, но все еще не получилось.

text:

sentences
company_name: company, ltd6

numbers 99 and letters 99 (I want to match anything here and nothing after)
numbers 99 and letters 99 (I don't want to match anything here or after)

код, который успешно захватывает регулярное выражение, но с номером:

company_name = re.findall(r"company_name:\s(.*)\D.+", text)

код, который успешно захватывает регулярное выражение без номера:

company_name = re.findall(r"company_name:\s(.*)(?=.\D.+)", text)

попытка перехватить следующую строку:

next_line = re.findall(r"company_name:\s(.*)(?=.\D.+).*", text)

Я ожидаю захватить следующую строку, но не сделаю.

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Исходя из вашего исходного выражения, я предполагаю, что, возможно, это выражение,

.*company_name:\s*(.*\D)\s*(\w.*)

может работать. У нас есть две группы, (.*\D) и (\w.*), в которые попадают наши желаемые результаты.

Демо 1

Или, может быть, этот:

.*company_name:\s*(.*)\s*(\w.*)

Демо 2

Тест

import re

regex = r".*company_name:\s*(.*\D)\s*(\w.*)"

test_str = ("sentences\n"
    "company_name: company, ltd6\n\n"
    "numbers 99 and letters 99 (I want to match anything here)")

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches, start=1):

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
0 голосов
/ 28 июня 2019

Получит только следующую строку и проигнорирует последующие строки:

next_line = re.sub(r".*company_name:[^\n]+\n*([^\n]+).*", r'\1', text, flags=re.S)

т.е.: numbers 99 and letters 99 (I want to match anything here and nothing after)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...