Вы можете использовать
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 .