У меня есть следующее регулярное выражение, чтобы сопоставить элементы в начале текста (необязательно), пропустить часть и затем сопоставить остальное (опять необязательно):
([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
Как я могу предотвратить разделение двух совпадений регулярных выражений, разделенных просмотром вперед? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Замена регулярных выражений C# с игнорированием совпадений, найденных в строковых кавычках
Anonymous » » в форуме C# - 0 Ответы
- 58 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Замена регулярных выражений C# с игнорированием совпадений, найденных в строковых кавычках
Anonymous » » в форуме C# - 0 Ответы
- 43 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Замена регулярных выражений C# с игнорированием совпадений, найденных в строковых кавычках
Anonymous » » в форуме C# - 0 Ответы
- 49 Просмотры
-
Последнее сообщение Anonymous
-