我有一个文件中有大量文字。其中一些看起来像这样:
X-DSPAM-Processed: Fri Jan 4 18:10:48 2008
X-DSPAM-Confidence: 0.6178
X-DSPAM-Probability: 0.0000
Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39771
Author: louis@media.berkeley.edu
Date: 2008-01-04 18:08:50 -0500 (Fri, 04 Jan 2008)
New Revision: 39771
Modified:
bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src/bundle/sitesetupgeneric.properties
bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java
Log:
BSP-1415 New (Guest) user Notification
我只需要提取符合此模式的日期:
2008-01-04 18:08:50 -0500
这是我尝试的内容:
import re
text = open('mbox-short.txt')
for line in text:
dates = re.compile('\d{4}(?P<sep>[-/])\d{2}(?P=sep)\d{2}\s\d{2}:\d{2}:]\d{2}\s[-/]\d{4}')
print(dates)
text.close()
我得到的回报是数百个:
\d{4}(?P<sep>[-/])\d{2}(?P=sep)\d{2}\s\d{2}:\d{2}:]\d{2}\s[-/]\d{4}
答案 0 :(得分:1)
两件事:
首先,正则表达式本身:
regex = re.compile(r'\b\d{4}[-/]\d{2}[-/]\d{2}\s\d{2}:\d{2}:\d{2}\s[-+]\d{4}\b')
其次,您需要致电regex.findall(file)
,其中file
是一个字符串:
>>> regex.findall(file)
['2008-01-04 18:08:50 -0500']
re.compile()
produces a compiled regular expression object。 findall
是此对象的几个方法之一,可让您进行实际的搜索/匹配/查找。
最后:您目前正在使用命名捕获组。 ((?P<sep>[-/])
)从您的问题来看,&#34;我只需要提取符合此模式的日期,&#34;它似乎不需要这些。您想要提取整个表达式,而不是捕获&#34;分隔符,&#34;这是捕获组的设计目标。
完整代码块:
>>> import re
>>> regex = re.compile(r'\b\d{4}[-/]\d{2}[-/]\d{2}\s\d{2}:\d{2}:\d{2}\s[-+]\d{4}\b')
>>> with open('mbox-short.txt') as f:
... print(regex.findall(f.read()))
...
['2008-01-04 18:08:50 -0500']
答案 1 :(得分:-1)
这是另一个解决方案。
import re
numberExtractRegex = re.compile(r'(\d\d\d\d[-]\d\d[-]\d\d\s\d\d[:]\d\d[:]\d\d\s[-]\d\d\d\d)')
print(numberExtractRegex.findall('Date: 2008-01-04 18:08:50 -0500 (Fri, 04 Jan 2008), Date: 2010-01-04 18:08:50 -0500 (Fri, 04 Jan 2010)'))