如何忽略正则表达式中的字母

Yon*_*aum 0 python regex date

我有这样的日期字符串 -

bla bla, janaury 1932 bla bla
Run Code Online (Sandbox Code Playgroud)

我想只使用正则表达式获得1932年 1月(1月份有拼写错误)

如果我使用jan [a-z]*\s\d{4},显然我会 - "janaury 1932"

Wik*_*żew 5

捕获您需要的部件,然后加入:

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)

请参阅正则表达式演示此Python演示.

图案细节

  • \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位数字连接到所需的结果中.