我想匹配(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"如果它匹配。
答案 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/-]+)
如果您不想捕捉匹配后的空格,请使用此选项。
\b([\d]{1,2}[\s/-]+[\d]{2,4}[-:–\s.]+\d{1,2}[\s/-]+[\d]{2,4})\b
如果我想检查是否说“09/14 - ”之后是“单词(列表中的任何单词)”或“dd / yy或dd / yyyy”之类的模式,我该怎么办。
\b[\d]{1,2}[\s/-]+[\d]{2,4}[-:–\s.]+(?:\d{1,2}[\s/-]+[\d]{2,4}|\w)
>>> 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']