正则表达式无法扩展以在Python中找到类似的模式

时间:2015-01-30 03:49:42

标签: python regex

我想匹配(dd / yy - dd / yy)或(0d / yyyy - 0d / yyyy)的模式。文本中类似模式的任何可能组合。

我的文字是:

 text  = ''' 09/14 - 18/18 some text 09/13 – 04/14 '''

我的模式是:

 r"b([\d]{1,2}[\s/-]+[\d]{2,4}[-:\s.]+\d{1,2}[\s/-]+[\d]{2,4}[\s/-]+)"

它成功匹配09/14 - 18/18。但不匹配文本中的09/13 - 04/14。 我怀疑的另一个问题是,如果我想检查是否说" 09/14 - "后跟一个"单词(列表中的任何单词)"或类似" dd / yy或dd / yyyy"我该怎么办。我的观点是,如果它匹配任何一个检查我必须选择" 09/14"。即," 09/14 - "如果它匹配或" 09/14 - dd / yyyy"如果它匹配。

1 个答案:

答案 0 :(得分:1)

  

它成功匹配09/14 - 18/18。但是在文本中没有匹配09/13 - 04/14。

因为-是不同的字符。

\b([\d]{1,2}[\s/-]+[\d]{2,4}[-:–\s.]+\d{1,2}[\s/-]+[\d]{2,4}[\s/-]+)

DEMO

如果您不想捕捉匹配后的空格,请使用此选项。

\b([\d]{1,2}[\s/-]+[\d]{2,4}[-:–\s.]+\d{1,2}[\s/-]+[\d]{2,4})\b

DEMO

  

如果我想检查是否说“09/14 - ”之后是“单词(列表中的任何单词)”或“dd / yy或dd / yyyy”之类的模式,我该怎么办。

\b[\d]{1,2}[\s/-]+[\d]{2,4}[-:–\s.]+(?:\d{1,2}[\s/-]+[\d]{2,4}|\w)

DEMO

>>> text  = ''' 09/14 - 18/18 some text 09/13 – 04/14 '''
>>> re.findall(r'\b([\d]{1,2}[\s/-]+[\d]{2,4}[-:–\s.]+\d{1,2}[\s/-]+[\d]{2,4})\b', text)
['09/14 - 18/18', '09/13 – 04/14']