我正在尝试搜索具有 6 位数字的字符串,但仅此而已,其他字符可能会跟随。这是我使用的正则表达式\d{6}[^\d]
由于某种原因它没有捕捉到确实捕捉到的数字\d{6}
。
更新
现在我正在使用确实有意义的正则表达式 (\d{6}\D*)$。但无论如何我都无法让它工作。
更新 2 - 解决方案
我当然应该用括号将 \d{6} 分组。嗬!否则,它会包含非数字并尝试与之约会。
更新结束
我想要达到的目标(作为一个相当肮脏的黑客)是在以下格式之一的 openoffice 文档的标题中找到一个日期字符串:YYMMDD
,YYYY-MM-DD
或YYYYMMDD
. 如果它找到其中之一(并且只有一个),它将将该文件的 mtime 和 atime 设置为该日期。尝试在 /tmp100101
的标头中创建一个 odt 文件并运行此脚本(要下载的示例文件:http: //db.tt/9aBaIqqa)。根据我的测试,它不应该改变 mtime/atime。但是,如果您在下面的脚本中删除 \D,它将改变它们。
这是我的全部来源:
import zipfile
import re
import glob
import time
import os
class OdfExtractor:
def __init__(self,filename):
"""
Open an ODF file.
"""
self._odf = zipfile.ZipFile(filename)
def getcontent(self):
# Read file with header
return self._odf.read('styles.xml')
if __name__ == '__main__':
filepattern = '/tmp/*.odt'
# Possible date formats I've used
patterns = [('\d{6}\D', '%y%m%d'), ('\d{4}-\d\d-\d\d', '%Y-%m-%d'), ('\d{8}', '%Y%m%d')]
# go thru all those files
for f in glob.glob(filepattern):
# Extract data
odf = OdfExtractor(f)
# Create a list for all dates that will be found
findings = []
# Try finding date matches
contents = odf.getcontent()
for p in patterns:
matches = re.findall(p[0], contents)
for m in matches:
try:
# Collect regexp matches that really are dates
findings.append(time.strptime(m, p[1]))
except ValueError:
pass
print f
if len(findings) == 1: # Don't change if multiple dates was found in file
print 'ändrar till:', findings[0]
newtime = time.mktime(findings[0])
os.utime(f, (newtime, newtime))
print '-' * 8