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

时间:2017-08-04 11:18:53

标签: python regex date

我有一个这样的日期字符串 -

bla bla, janaury 1932 bla bla

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

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

2 个答案:

答案 0 :(得分: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

请参阅Python demo

注意:如果您想确保匹配其中一个月份名称,请使用基于交替的正则表达式:

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)

请参阅regex demothis Python demo

模式详情

  • \b - 一个单词边界(将january作为整个单词匹配)
  • ([^\W\d_]{3}) - 第1组:正好是3个字母
    OR
  • (j(?:an|u[nl])|feb|ma[ry]|a(?:pr|ug)|sep|oct|nov|dec) - 任何英文月份名称的前3个字母
  • \w* - 0+ word chars
  • \s+ - 一个或多个空格
  • ([0-9]{4}) - 第2组:四位ASCII数字
  • \b - 一个单词边界(以便匹配的四位数字后面不能跟一个字母,数字或_)。

使用"{} {}".format(m.group(1),m.group(2)jan和4位数字会连接到所需的结果中。

答案 1 :(得分:0)

如果我理解正确,你不想忽略所有字母,而只忽略其中一些字母。

你的表情非常接近。 您可以使用此表达式捕获您想要的内容(您捕获将它放在()之间的内容:

(jan).*(\d{4})

并使用此

恢复捕获的内容
.group(1) .group(2)