извлечение возрастных изменений с помощью регулярных выражений - PullRequest
0 голосов
/ 03 октября 2019
import re
s = '18year old 23 year old 99 years old but not 25-year-old and 91year old cousin is 99 now and 90-year-old or 102 year old'

Из s я хотел бы извлечь все возрасты, которые 90 или более, с помощью регулярных выражений. Например, 99 years old будет извлечено, но не 18year old.

Я пробовал следующее

    reg = r'(9\d|\d{3,})(-year-old)|(9\d|\d{3,})( year old)'
    r1 = re.findall(reg,s)
    r1

, что дает мне

[('90', '-year-old', '', ''), ('', '', '102', ' year old')]

В идеале, яхотел бы этот вывод

['99 years old', '91year old', '90-year-old',  '102 year old' ]

Как мне изменить мое регулярное выражение reg, чтобы получить желаемый результат?

1 Ответ

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

Это регулярное выражение будет делать то, что вы хотите:

(?:9\d|1\d{2})(?:\s|-)?years?(?:\s|-)?old

Regex Demo

Объяснение:

(?:9\d|1\d{2})     # Non-capturing group - match 9x or 1xx
(?:\s|-)?          # Non-capturing group - optionally match whitespace or -
years?             # Match year and optionally s
(?:\s|-)?          # Non-capturing group - optionally match whitespace or -
old                # Match old

Фрагмент кода:

reg = r'(?:9\d|1\d{2})(?:\s|-)?years?(?:\s|-)?old'
r1 = re.findall(reg,s)
print(r1)
# ['99 years old', '91year old', '90-year-old', '102 year old']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...