我有这样的日期字符串 -
bla bla, janaury 1932 bla bla
Run Code Online (Sandbox Code Playgroud)
我想只使用正则表达式获得1932年 1月(1月份有拼写错误)
如果我使用jan [a-z]*\s\d{4},显然我会 - "janaury 1932"
捕获您需要的部件,然后加入:
import re
s = 'bla bla, janaury 1932 bla bla'
m = re.search(r"\b([^\W\d_]{3})\w*\s+([0-9]{4})\b", s)
if m:
print("{} {}".format(m.group(1),m.group(2))) # => jan 1932
Run Code Online (Sandbox Code Playgroud)
请参阅Python演示
注意:如果要确保匹配其中一个月份名称,请使用基于交替的正则表达式:
m = re.search(r"\b(j(?:an|u[nl])|feb|ma[ry]|a(?:pr|ug)|sep|oct|nov|dec)\w*\s+([0-9]{4})\b", s, re.I)
Run Code Online (Sandbox Code Playgroud)
图案细节
\b- 单词边界(january作为整个单词匹配)([^\W\d_]{3})- 第1组:正好3个字母(j(?:an|u[nl])|feb|ma[ry]|a(?:pr|ug)|sep|oct|nov|dec) - 任何英文月份名称的前3个字母\w* - 0+单词字符\s+ - 一个或多个空格([0-9]{4}) - 第2组:四个ASCII数字\b- 单词边界(以便匹配的四位数字不能跟随字母,数字或_).使用时"{} {}".format(m.group(1),m.group(2),将jan4位数字连接到所需的结果中.