обнаружить несколько паттернов в одной строке - python-regex - PullRequest
0 голосов
/ 22 февраля 2019

Я отредактировал приведенное ниже регулярное выражение в соответствии с ответом, который я получил на этот вопрос.

В моей строке содержится год и месяц.Мне нужно обнаружить оба с помощью регулярного выражения.

String1 = " I have total exp of 10-11 years. This includes 15yearsin SAS and 5 
years in python. I also have 8 months of exp in R programming."

import re
pat= re.compile(r'\d{1,3}(?:\W+\d{1,3})?\W+(?:plus\s*)?(?:year|month|Year|Month)s?\b', re.X)
experience = re.findall(pat,String1 )    
print(experience)
['10-11 years', '5 years', '8 months']

Но я также хочу, чтобы термины без пробела, т.е. 15 лет (как я читаю из свободно текущего текста).

Кто-нибудь может помочь в достижении правильного регулярного выражения?

1 Ответ

0 голосов
/ 22 февраля 2019

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

r'\b\d{1,2}(?:\D+\d{1,2})?\D+(?:year|month)s?\b'

См. Демонстрационную версию regex , которая выводит ['10-11 years', '15 years in SAS and 5 years', '8 months'].

Подробнее

  • \b - граница слова
  • \d{1,2} - одна или две цифры
  • (?:\D+\d{1,2})? - необязательная последовательность
    • \D+ - 1+ символовкроме цифры
    • \d{1,2} - 1 или 2 цифры
  • \D+ - один или несколько нецифровых символов
  • (?:year|month)- year или month
  • s? - необязательный s
  • \b - граница слова.

Pythonдемо :

import re
String1 = " I have total exp of 10-11 years. This includes 15 years in SAS and 5 years in python. I also have 8 months of exp in R programming."
reg = r'\b\d{1,2}(?:\D+\d{1,2})?\D+(?:year|month)s?\b'
print(re.findall(reg, String1))
# => ['10-11 years', '15 years in SAS and 5 years', '8 months']

ПРИМЕЧАНИЕ : если вы планируете получить ['10-11 years', '15 years', '5 years', '8 months'], замените \D+ на \W+ ( один или несколько символов, отличных от букв,цифра, подчеркивание ) и использование

r'\b\d{1,2}(?:\W+\d{1,2})?\W+(?:year|month)s?\b'

См. это демонстрационное выражение regex .

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