在文本中搜索模式

时间:2017-06-12 09:22:56

标签: python regex

我开发了这段代码来查找文本中的模式:

pattern = re.compile(r'\: (\d{2})/(\d{2})/(\d{4})')
match = re.search(pattern, txt)

我的模式是这样的日期:dd/mm/yyyy。问题如下:在文本中可能会出现两个日期,但我想只得到一个。两者之间的差异是日期之前的文本。我的意思是:

text1: dd/mm/yyyy
text2: dd/mm/yyyy

我只想在之前使用text2获取日期。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

在模式中使用text2并捕获日期子模式:

import re
txt = """text1: 12/05/2015
text2: 22/05/2016"""
pattern = re.compile(r'text2:\s*(\d{2}/\d{2}/\d{4})')
match = re.search(pattern, txt)
if match:
    print(match.group(1))

请参阅Python demo

<强>详情:

  • text2: - 文字子字符串
  • \s* - 0+ whitespaces
  • (\d{2}/\d{2}/\d{4}) - 捕获与2位数字相匹配的群组1,/,2位数,/,然后是4位数。

re.search方法会找到第一个匹配项,如果找到,我们需要获取第一个捕获组(match.group(1))的内容。

答案 1 :(得分:0)

您可以在列表中找到您找到的每个日期,然后选择最后一个日期。

list_of_dates = []
pattern = re.compile(r'\: (\d{2})/(\d{2})/(\d{4}))') 

for date in pattern.finditer(txt):
   list_of_dates.append(date.group(1)) # Take date as back reference

list_of_dates[-1] # This would give you last date