модификация извлечения возрастных вариаций с использованием регулярных выражений - PullRequest
2 голосов
/ 03 октября 2019
    import re
    s = '99year old 93yo 100 yo 97y.o. and his wife is 93 y.o. 20 y.o  90old 23 year old 29 years old but not 25-year-old and 91year old cousin is 99 now and 90-year-old or 102 year old'
    reg = r'(?:9\d|1\d{2})(?:\s|-)?years?(?:\s|-)?old'
    r1 = re.findall(reg,s)
    r1
    ['99year old', '91year old', '90-year-old', '102 year old']

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

Моя цель - извлечь элементы, перечисленные в r1 плюс любую цифру выше 90 , оканчивающихся на y.o. или yo. Мой желаемый результат -

 ['99year old', '93yo', '100 yo', '97y.o., '93 y.o.',  '91year old', '90-year-old', '102 year old']

Я пытался изменить reg следующим образом, но это не работает тихо

reg = r'(?:9\d|1\d{2})(?:\s|-)?years?(?:\s|-)?old(?:9\d|1\d{2})y.o.|(?:9\d|1\d{2})yo' 

Как мне изменить reg, чтобы получить желаемоевыход

1 Ответ

2 голосов
/ 03 октября 2019

Я предполагаю, что, возможно, какое-то выражение, похожее на

\b(?:9\d|1\d{2})\s*-?y(?:ears?)?\.?\s*-?o(?:ld)?\.?\b

, может быть вполне подходящим для изучения.

Тест

import re

regex = r'\b(?:9\d|1\d{2})\s*-?y(?:ears?)?\.?\s*-?o(?:ld)?\.?\b'
string = '''
99year old 93yo 100 yo 97y.o. and his wife is 93 y.o. 20 y.o  90old 23 year old 29 years old but not 25-year-old and 91year old cousin is 99 now and 90-year-old or 102 year old
'''

print(re.findall(regex, string))

Выход

['99лет', '93лет', '100 лет', '97лет.о', '93 года.o ',' 91year old ', '90 -year-old', '102 year old']


Если вы хотите упростить / изменить / изучить выражение, это объясненона верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


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