Найдите многолетний опыт работы со строками с использованием регулярных выражений в Python - PullRequest
0 голосов
/ 10 декабря 2018

Как мне написать регулярное выражение, которое ищет в Python следующее:

10+ years
10 years
1 year
10-15 years

До сих пор я использовал это, но он не дает результата для всех из них.

re_expression = '(\d+).(years|year|Year|Years)'
    exp_temp = re.search(re_expression.decode('utf-8'),description)
    experience_1=''
    if exp_temp:
        experience_1 = exp_temp.groups()

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Если вы хотите сопоставить свои значения и вам не нужны группы захвата, вы можете использовать:

\b(?:\d+-\d+ [yY]ears|[02-9] [Yy]ears|1 [Yy]ear|[1-9]\d+\+? [Yy]ears)\b

См. Демонстрационную версию regex

Пояснение

  • \b Граница слова
  • (?: Группа без захвата
    • \d+-\d+ [yY]ears Формат соответствия 10-15 лет
    • | или
    • [02-9] [Yy]ears формат совпадения 0 или 2-9 лет
    • | или
    • 1 [Yy]ear формат совпадения1 год
    • | Или
    • [1-9]\d+\+? [Yy]ears Формат соответствия 10+ лет
  • ) Закрыть группу без захвата
  • \b Граница слова

Демо Python

0 голосов
/ 10 декабря 2018

([\d+-]+)\s+(years?)


import re

x ="""
123 10+ years some text
some text 99 10 years ssss
text 1 year and more text
some text 10-15 years some text
"""

result = re.findall(r"([\d+-]+)\s+(years?)", x, re.IGNORECASE)
print(result)

[('10+', 'years'), ('10', 'years'), ('1', 'year'), ('10-15', 'years')]

Python Demo

Regex Demo


Regex Объяснение:

enter image description here

0 голосов
/ 10 декабря 2018

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

r'(\d+(?:-\d+)?\+?)\s*(years?)'

См. Демоверсию regex .Скомпилируйте с флагом re.I, чтобы включить сопоставление без учета регистра.

Подробности

  • (\d+(?:-\d+)?\+?) - группа 1:
    • \d+- 1+ цифр
    • (?:-\d+)? - необязательное совпадение группы -, а затем 1+ цифр
    • \+? - необязательное + char
  • \s* - 0+ пробелов
  • (years?) - Группа 2: year или years

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

import re
rx = re.compile(r"(\d+(?:-\d+)?\+?)\s*(years?)", re.I)
strs = ["10+ years", "10 years", "1 year", "10-15 years"] 
for description in strs:
    exp_temp = rx.search(description)
    if exp_temp:
        print(exp_temp.groups())

Выход:

('10+', 'years')
('10', 'years')
('1', 'year')
('10-15', 'years')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...