Нахождение всех моделей с RE - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть эта строка:

"(a) first, (b) second, (c) important"

Я пытаюсь найти все строки перед строкой "(c) важный", так что это мое регулярное выражение -

"(?:\([a-z]\) ([a-z]+), )+\([a-z]\) important"

re.findall находит только «вторую» строку (без «первой» строки).
Я пытался использовать re.finditer и модуль regex (с наложенным флагом), но все они возвращают один и тот же результат.

Что нужно сделать здесь, чтобы он нашел все строки перед «важной» строкой?

Примечание -
Входная строка может отличаться.Например -

"(a) aa, (b) cc, (c) dd, (d) oi, (e) important" - should return ["aa", "cc", "dd", "oi"]   
"(a) aa, (b) asdf, (c) wer" - should return nothing

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете использовать

\([a-z]\)\s+([a-z]+)(?=(?:\s*,\s*\([a-z]\)\s+[a-z]+)*\s*,\s*\([a-z]\)\s+important)

См. Демоверсию regex

Подробности

  • \([a-z]\)- строчная буква внутри скобок
  • \s+ - 1+ пробелов
  • ([a-z]+) - Группа 1: одна или несколько строчных букв внутри скобок
  • (?=(?:\s*,\s*\([a-z]\)\s+[a-z]+)*\s*,\s*\([a-z]\)\s+important) - aположительный прогноз, который соответствует местоположению, за которым сразу следует
    • (?:\s*,\s*\([a-z]\)\s+[a-z]+)* - 0 или более повторений
      • \s*,\s* - запятая, заключенная в 0+ пробелов
      • \([a-z]\)- буква, заключенная в скобки
      • \s+ - 1+ пробелы
      • [a-z]+ - 1+ строчные буквы
    • \s*,\s* - aзапятая, заключенная в 0+ пробелов
    • \([a-z]\) - строчная буква внутри скобок
    • \s+ - 1+ пробелов
    • important - слово.

Демонстрация Python :

import re
strs = ["(a) first, (b) second, (c) important", "(a) aa, (b) cc, (c) dd, (d) oi, (e) important", "(a) aa, (b) asdf, (c) wer" ]
r = re.compile(r'\([a-z]\)\s+([a-z]+)(?=(?:\s*,\s*\([a-z]\)\s+[a-z]+)*\s*,\s*\([a-z]\)\s+important)')
for s in strs:
    print(r.findall(s))

Выход:

['first', 'second']
['aa', 'cc', 'dd', 'oi']
[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...