我有以下RegEx语句,该语句将以与月,日和年匹配的日期格式(例如2001年1月1日)返回匹配项
[12]\d|3[01]))|\w+\s\d{2},\s\d{4}
我想对其进行修改,以使其包含缩写月份中的匹配项,并且在第二天之后带有或不带有逗号。因此,例如,匹配项将包括以下内容:
Jan 01 2001
Jan 01, 2001
January 01 2001
January 01, 2001
我相信下面的部分内容是我需要的,但是我似乎无法将所有内容放在一起。任何帮助将不胜感激。
(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)
答案 0 :(得分:2)
您处在正确的轨道上。 需要什么:
\b
(?:0[1-9]|[1-2][0-9]|3[01])
匹配数字范围,?
,后跟空格
^
的开头$
和结尾处的锚点。您可以使用:
^\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b (?:0[1-9]|[1-2][0-9]|3[01]),? \d{4}$
正则表达式演示here。
如注释中所述,如果需要不区分大小写,请在模式开头添加(?i)
选项。如果模式使用较大的字符串,则只需移除锚点:
(?i)\b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b (?:0[1-9]|[1-2][0-9]|3[01]),? \d{4}
正则表达式演示here。
顺便说一句,对于June
或July
这样的月份,您可以简单地使用June?
和July?
而不是Jun(?:e)?
和{{1} }。
答案 1 :(得分:0)
import re
s = 'Jan 01 2001\nJan 01, 2001\nJanuary 01 2001\nJanuary 01, 2001'
print(s)
>>>Jan 01 2001
>>>Jan 01, 2001
>>>January 01 2001
>>>January 01, 2001
由于一个月的缩写仅是其前3个字母,因此您可以在该月的其余字母中使用[a-z] *。
例如,
(?: Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec)找到“ Jan”,并且
[a-z] * 找到一月份的“ uary”。
re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]* \d{2},?\d{4}',s)
>>>['Jan 01 2001', 'Jan 01, 2001', 'January 01 2001', 'January 01, 2001']