2016-11-28 51 views
1

我正在尝试从几篇文章中提取日期。当我测试正则表达式时,模式只匹配部分感兴趣的信息。正如你可以看到: https://regex101.com/r/ATgIeZ/2正则表达式|从文本中提取日期

这是文本文件的样本:

|[<p>Advertisement , By MILAN SCHREUER and  ALISSA J. RUBIN OCT. 5, 2016 
, BRUSSELS — A man wounded two police officers with a knife in Brussels around...] 3004 
[<p>Advertisement , By DAVID JOLLY FEB. 8, 2016 
, KABUL, Afghanistan — A Taliban suicide bomber killed at least three people on Mo JULY 14, 2034 

提取模式,我使用和代码是这一个:

import re 

text_open = open("News_cleaned_definitive.csv") 
text_read = text_open.read() 
pattern = ("[A-Z]+\.*\s(\d+)\,\s(\d+){4}") 
result = re.findall(pattern,text_read) 
print(result) 

而来自Anaconda的输出是:

[('5', '6'), ('7', '5'), ('1', '6'), .....] 

预期的输出是:

OCT. 5, 2016, FEB. 8, 2016, JULY 14, 2034 ..... 
+2

圆括号之间的组只匹配数字。什么是预期的输出(也是,你的正则表达式在regextester是不同的) –

回答

1

问题是在最后一组之外的重复命令{4}。此外,为了捕捉月份正则表达式是不是一个组内

修复这样的:

pattern = r"([A-Z]+)\.?\s(\d+)\,\s(\d{4})" 

结果与您的数据样本:

[('OCT', '5', '2016'), ('FEB', '8', '2016'), ('JULY', '14', '2034')] 

零星的额外修复:

  • 可以有0或1个点。所以去除\.*\.?
  • 用“原始”的前缀,总是更好地界定正则表达式的字符串时(这里没有任何问题,但可以用\b例如发生)
+1

感谢您的帮助,我想提取的月份(FEB,7月等) –

+1

当然!我在想什么?编辑 –

1

感谢您的建议,它有助于了解使用在正则表达式中的括号。 我用这个解决了我自己:

pattern=("([A-Z]+\.*\s)(\d+)\,\s(\d{4})") 
相关问题