найти номера, начинающиеся с определенного числа с python - PullRequest
0 голосов
/ 02 апреля 2020

мне нужно найти годы дат рождения только начиная с 18xx и 19xx из строки

я использую регулярное выражение для решения задачи

у меня тестирование testbirtdays = 'ABCDEFG 01.19.1701 1801 02.18.1901 2001'

def getNumbers(str): 
    array = re.findall(r'[0-9]+', str) 
    return array 

Я могу использовать эту функцию, но результат будет:

getNumbers(testbirtdays)

#['01', '19', '1701', '1801', '02', '18', '1901', '2001']

моя функция не может выполнить 2 вещи:

  1. мне нужны только цифры, начиная с 18 и 19

  2. мне нужны только 4x номера, чтобы получить только годы и игнорировать месяцы / дни

, поэтому мне нужен вывод, как:

#['1801','1901']

Ответы [ 5 ]

3 голосов
/ 02 апреля 2020

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

r'(?<![0-9])1[89][0-9]{2}(?![0-9])'

Или с границами слова:

r'\b1[89][0-9]{2}\b'

См. regex demo # 1 и regex demo # 2 .

Подробности регулярного выражения:

  • (?<![0-9]) - ASCII di git не разрешается сразу слева
  • \b - граница слова
  • 1 - 1 di git
  • [89] - 8 или 9
  • [0-9]{2} - два ASCII ди git
  • (?![0-9]) - нет ASCII ди git допускается сразу справа или
  • \b - граница слова

См. Демоверсию Python :

import re

def getNumbers(s): 
    return re.findall(r'(?<![0-9])1[89][0-9]{2}(?![0-9])', s) 

testbirtdays = 'ABCDEFG 01.19.1701 1801 02.18.1901 2001'
print(getNumbers(testbirtdays)) # => ['1801', '1901']
2 голосов
/ 02 апреля 2020

здесь один из способов:

import re

re.findall(r'\b18\d{2}\b|\b19\d{2}\b', testbirtdays)

вывод:

['1801', '1901']
1 голос
/ 02 апреля 2020
test = 'ABCDEFG 01.19.1701 1801 02.18.1901 2001'
pattern = r'1[89]\d{2}'    
re.findall(pattern, test)

Шаблон ищет 1, затем 8 или 9 и еще 2 цифры.

Вывод:

['1801', '1901']

1 голос
/ 02 апреля 2020

Попробуйте:

def get_years(str):
    return re.findall(r"((?:18|19)\d{2})\b", str)

print(get_years(testbirtdays))

Вывод:

['1801', '1901']
1 голос
/ 02 апреля 2020

Вам необходимо указать более c регулярное выражение, например 1[8-9][0-9]{2}: 1, затем одну из 89, затем 2 цифры

. Вы также можете (?:18|19)[0-9]{2} начать с 18 или 19 затем 2 другие цифры

def getNumbers(value):
    return re.findall(r'1[8-9][0-9]{2}', value)

r = getNumbers('ABCDEFG 01.19.1701 1801 02.18.1901 2001')
print(r)  # ['1801', '1901']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...