用python查找以某个数字开头的数字

2024-09-29 21:51:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我只需要从字符串中查找以18xx19xx开头的出生日期年份

我用正则表达式来解决这个任务

我有测试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']

我的函数不能做两件事:

  1. 我只需要以1819

  2. 我只需要4x个数字就可以得到年,而忽略月/日

所以我需要像这样的输出:

#['1801','1901']


Tags: 函数字符串功能rereturndefarray两件事
3条回答

您需要一个更具体的正则表达式,如1[8-9][0-9]{2}:一个1,然后是89中的一个,然后是两个数字

您还可以执行(?:18|19)[0-9]{2}1819开头,然后执行其他两位数字

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']

你可以用

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

或者,用词边界:

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

请参见regex demo #1regex demo #2

正则表达式详细信息:

  • (?<![0-9])-左侧不允许立即使用ASCII数字
  • \b-单词边界
  • 1-一个1
  • [89]-89
  • [0-9]{2}-两个ASCII数字
  • (?![0-9])-右侧或右侧不允许立即使用ASCII数字
  • \b-单词边界

Python demo

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']

这里有一个方法:

import re

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

输出:

['1801', '1901']

相关问题 更多 >

    热门问题