让我们假设输入是这样的。实际上它更长,但为了清楚起见,我会留下这样的。
有效期:格林威治标准时间3月3日15:40:45 2014年+ 00:00直至:周一1月05日08:28:29 GMT + 00:00 0034
有效期:星期五1月10日08:28:29格林尼治标准时间+ 2014年00:00直至:周一1月05日08:28:29 GMT + 00:00 0034
这是我的代码:
certDataArray = []
patterns = ['Alias name:\s(.*)\n', 'Owner:\s(.*)\n', 'Issuer:\s(.*)\n', 'Serial number:\s(.*)\n', 'Valid from:\s(.*) until', 'until:\s(.*)\n']
for pattern in patterns:
result = re.compile(pattern)
result = result.findall(cmd)
certDataArray.append(result)
certDataArray = zip(certDataArray[0],certDataArray[1],certDataArray[2],certDataArray[3],certDataArray[4],certDataArray[5])
现在,问题是findall将不匹配模式的第二个匹配“until:\ s(。*)\ n”,因为已经存在相同的匹配。不确定我是否正确地说了,但你明白了。
我一直在谷歌搜索解决方案,发现2:
1)使用新改进的python regex模块。这不在桌面上,因为我没有在我的PC上运行它,这个代码将在企业级平台上运行。以任何方式升级python都不太可能,我不认为我可以将regex.py复制粘贴到服务器中以使python在那里使用它,或者我可以吗?我下载了软件包,似乎需要安装,我不允许在这个系统上进行安装。
2)re.iterate。一直在看它,坦率地说我不明白它是如何工作的
我还尝试将字符串分解为行并使用“for”循环遍历每一行,但这似乎是一种可能适得其反的延迟方法。
非常欢迎所有的想法,谢谢。
答案 0 :(得分:1)
这不是因为它是重复匹配 - 第二行不以'\n'
结尾。你真的应该使用:
r"raw strings"
以防止逃脱混乱; $
而不是\n
;和re.MULTILINE
选项可单独处理每一行。例如:
>>> s = """Valid from: Wed Mar 05 15:40:45 GMT+00:00 2014 until: Thu Jan 05 08:28:29 GMT+00:00 2034
Valid from: Fri Jan 10 08:28:29 GMT+00:00 2014 until: Thu Jan 05 08:28:29 GMT+00:00 2034"""
>>> import re
>>> re.findall(r'until:\s(.*)$', s, re.MULTILINE)
['Thu Jan 05 08:28:29 GMT+00:00 2034', 'Thu Jan 05 08:28:29 GMT+00:00 2034']