RE, чтобы извлечь середину строки с или без конкретного слова в конце - PullRequest
2 голосов
/ 06 февраля 2020

Я пытаюсь извлечь строку в середине строки с определенным словом в конце или без него. Например, эта строка:

START - some words and not THIS 

должна возвращать «некоторые слова и не», а также строка:

START - some words and not

также должна возвращать ту же строку. Я попытался использовать lookahead из примеров, которые я нашел с чередованием для EOL, но добавление чередования возвращает строку, заканчивающуюся THIS. Вот регулярное выражение python:

[^-]*- (.+(?= THIS|$))

Удаление | $ работает, кроме случаев, когда строка заканчивается без ЭТОГО. В данных, которые я анализирую, есть небольшое количество записей, в которых отсутствует "ЭТО", поэтому мне нужно учесть оба. Какой правильный шаблон для этого?

Ответы [ 3 ]

1 голос
/ 06 февраля 2020

Вы можете использовать ленивый квантификатор (.+?), как в

[^-]*- (.+?)(?:THIS|$)

См. демонстрацию на regex101.com .

0 голосов
/ 06 февраля 2020

Если я правильно понимаю, это должно сработать:

>>> regex = re.compile(r"(?!THIS)([^-]*- .+)(THIS)?$")
>>> s1 = 'START - some words and not THIS'
>>> regex.match(s1).groups()
('START - some words and not ', 'THIS')
>>> s2 = 'START - some words and not '
>>> regex.match(s2).groups()
('START - some words and not ', None)
0 голосов
/ 06 февраля 2020

Пожалуйста, взгляните на this .

. Исходя из вашего примера, следующее регулярное выражение (?<=START - )(.*)(?=THIS) поймает some words and not. Надеюсь, это поможет!

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