用python查找以某个数字开头的数字
我需要从字符串中查找出生日期的年份,只能从用python查找以某个数字开头的数字,python,regex,Python,Regex,我需要从字符串中查找出生日期的年份,只能从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','1
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']
我的函数不能做两件事:
18
和19
4x
数字就可以得到年份而忽略月份/天#['1801','1901']
您可以使用
r'(?<![0-9])1[89][0-9]{2}(?![0-9])'
请参见和
正则表达式详细信息:
(?-左侧不允许立即出现ASCII数字
-单词边界\b
-一个1
数字1
-[89]
或8
9
-两个ASCII数字[0-9]{2}
-右侧或右侧不允许立即出现ASCII数字(?![0-9])
-单词边界\b
重新导入
数字:
返回re.findall(r’(?您需要一个更具体的正则表达式,如1[8-9][0-9]{2}
:a1
,然后是89
中的一个,然后是两位数字
您还可以执行(?:18 | 19)[0-9]{2}
以18
或19
开头,然后执行其他两位数字
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']
这里有一个方法:
import re
re.findall(r'\b18\d{2}\b|\b19\d{2}\b', testbirtdays)
输出:
['1801', '1901']
['1801', '1901']
试试这个:
def get_years(str):
return re.findall(r"((?:18|19)\d{2})\b", str)
print(get_years(testbirtdays))
输出:
该模式查找1后跟8或9,以及2个以上的数字
输出:
['1801',1901']
字符类[]
中的
并不意味着或而是一个管道字符,但这是我得到的输出:['1801',1901']
你得到了输出,但它可能也匹配1 | 01
啊,对了。现在我得到了它-[]
本身执行或
部分,因此它应该是[89]
。准确地说,但是现在您仍然可以在例如55180155中获得部分匹配,我认为这不是期望的结果。Wiktor Stribiżew提供的说明了如何防止这种情况。
def get_years(str):
return re.findall(r"((?:18|19)\d{2})\b", str)
print(get_years(testbirtdays))
['1801', '1901']
test = 'ABCDEFG 01.19.1701 1801 02.18.1901 2001'
pattern = r'1[89]\d{2}'
re.findall(pattern, test)