gpt4 book ai didi

regex - 使正则表达式更具体以排除某些字符的修改

转载 作者:行者123 更新时间:2023-12-02 08:00:14 27 4
gpt4 key购买 nike

import re
s = '01.20/15 01/20.1915 1/1/19 01.11.11 1.8-24 3-4.12 01/20-09 12/12/1981 12-01/2001 1*51*12 22|1|13 03-02-1919 1-22-12 or 01-23-18 or 03-23-1984 01.11.18 or 2.2.17 or 02.02.18 or 12.1.16 12.23.1943 01-23-11 not 12.23.192 not 02.02.1'

我有以下字符串 s,它是对 making regex more specific to exclude certain characters的修改

我想得到所有日期,所以我用
reg = r'\b((?:\d{1,2}(?:\.|\/|-)){2}(?:\d{4}|\d{2}))\b'
r1 = re.findall(reg,s)
r1

我得到
['01.20/15',
'01/20.1915',
'1/1/19',
'01.11.11',
'1.8-24',
'3-4.12',
'01/20-09',
'12/12/1981',
'12-01/2001',
'03-02-1919',
'1-22-12',
'01-23-18',
'03-23-1984',
'01.11.18',
'2.2.17',
'02.02.18',
'12.1.16',
'12.23.1943',
'01-23-11']

这接近我想要的,但我不希望混合使用 ./-的字符串,例如 '01.20/15''3-4.12'3-4.12

我想要的输出是这个
['1/1/19',
'01.11.11',
'12/12/1981',
'03-02-1919',
'1-22-12',
'01-23-18',
'03-23-1984',
'01.11.18',
'2.2.17',
'02.02.18',
'12.1.16',
'12.23.1943',
'01-23-11']

其中不包含任何混合了 ./-的数字,例如 '01.20/15''3-4.12'
我也尝试过修改 reg
reg = r'\b((?:\d{1,2}(?:\.\b|\\b/|-\b)){2}(?:\d{4}|\d{2}))\b'

但这不太有效

如何进一步修改 reg以获得所需的输出?

最佳答案

我猜想反向引用在这里可能不是一个坏主意:

\b([0-9]{1,2}([./-])[0-9]{1,2}\2[0-9]{2,4})\b

要么
\b[0-9]{1,2}([.\/-])[0-9]{1,2}\1(?:[0-9]{2}|[0-9]{4})\b

Demo

测试
import re

regex = r'\b([0-9]{1,2}([./-])[0-9]{1,2}\2\d{2,4})\b'
string = '''
01.20/15 01/20.1915 01.11.11 1.8-24 3-4.12 01/20-09 12/12/1981 12-01/2001 1*51*12 22|1|13 03-02-1919 1-22-12 or 01-23-18 or 03-23-1984 01.11.18 or 2.2.17 or 02.02.18 or 12.1.16 12.23.1943 01-23-11 not 12.23.192 not 02.02.1

'''

matches = re.findall(regex, string)

output = []
for match in matches:
output.append(match[0])

print(output)

输出量

['01.11.11', '12/12/1981', '03-02-1919', '1-22-12', '01-23-18', '03-23-1984', '01.11.18', '2.2.17', '02.02.18', '12.1.16', '12.23.1943', '01-23-11', '12.23.192']



Demo

关于regex - 使正则表达式更具体以排除某些字符的修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58261214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com