Как я могу предотвратить разделение двух совпадений регулярных выражений, разделенных просмотром вперед?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу предотвратить разделение двух совпадений регулярных выражений, разделенных просмотром вперед?

Сообщение Anonymous »

У меня есть следующее регулярное выражение, чтобы сопоставить элементы в начале текста (необязательно), пропустить часть и затем сопоставить остальное (опять необязательно):
([A-Z]{1,3}[a-z]{1,3}\.\-?\s?)*(\s?\([A-Z]{2}\)\s)?([A-Z]{2}\s)?)?(?![A-Z][a-z]\s]+)([A-Z]{3}\s?)*

здесь ссылка на регулярное выражение: regex101
чья упрощенная версия (обратите внимание на упреждающий просмотр посередине):
somestuff?(?![A-Z][a-z]\s]+)someotherstuff?

Это работает нормально, если я сопоставляю любой из двух или не сопоставляю ни одного. Если я сопоставлю оба совпадения с помощью Python, то на самом деле это будет два совпадения, а не одно:
regex = r"(([A-Z]{1,3}[a-z]{1,3}\.\-?\s?)*(\s?\([A-Z]{2}\)\s)?([A-Z]{2}\s)?)?(?![A-Z][a-z]\s]+)([A-Z]{3}\s?)*"

test_str = "Test.-Ing. (XX) Foo Bar YYY DDD\n"
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum}: {match}".format(matchNum = matchNum, match = match.group().strip()))

В результате:
Match 1: Test.-Ing.
Match 2: YYY DDD

вместо:
Match 1: Test.-Ing. YYY DDD

Что я могу сделать, чтобы совместить оба значения в одном совпадении? Я пробовал помещать () вокруг всего, это не сработало.
PS: я знаю, что он также соответствует пустым строкам.
EDIT некоторые примеры входных и выходных данных:
Test.-Ing. (XX) Foo Bar YYY DDD
Test.Ing. Foo Bar
Foo Bar DDD
Foo Bar DDD YYY
Dr. Foo Bar
Test.-Ing. Foo Bar
Test. Foo Bar
XX Foo Bar
Foo F. Bar

Вывод всегда — все, кроме Foo и Bar, которые являются именами, поэтому они почти всегда разные и могут содержать одну заглавную букву, за которой следует точка (F.), например. :
Test.-Ing. (XX) YYY DDD
Test.Ing.
DDD
DDD YYY
Dr.
Test.-Ing.
Test.
XX
'None'/no output


Подробнее здесь: https://stackoverflow.com/questions/785 ... look-ahead
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Замена регулярных выражений C# с игнорированием совпадений, найденных в строковых кавычках
    Anonymous » » в форуме C#
    0 Ответы
    58 Просмотры
    Последнее сообщение Anonymous
  • Замена регулярных выражений C# с игнорированием совпадений, найденных в строковых кавычках
    Anonymous » » в форуме C#
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Замена регулярных выражений C# с игнорированием совпадений, найденных в строковых кавычках
    Anonymous » » в форуме C#
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous
  • Фильтрация совпадений регулярных выражений с помощью Aspell
    Anonymous » » в форуме Linux
    0 Ответы
    79 Просмотры
    Последнее сообщение Anonymous
  • Создать массив совпадений регулярных выражений
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»