让我们假设输入是这样的。实际上它更长,但为了清晰起见,我会这样离开它。python re.findall不匹配副本
有效期从:周三3月5日十五点40分45秒GMT + 00:00 2014至:周四年1月5 8点28分29秒GMT + 00:00 2034
有效期从:周五08年1月10日:28:29 GMT + 00:00 2014至:周四年1月5 8时28分29秒GMT + 00:00 2034
这里是我的代码:
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不会匹配t他第二次匹配模式“直到:\ s(。*)\ n”,因为已经有相同的匹配。不知道我是否正确表达了意思,但你明白了。
我一直在使用Google的解决方案,并发现2:
1)使用新的改进的蟒蛇正则表达式模块。这不在我们的桌面上,因为我没有在我的电脑上运行此代码,所以这些代码将在企业级平台上运行。以任何方式升级python是不太可能的,我不认为我可以将regex.py复制粘贴到服务器中,以使python在那里使用它,或者我可以吗?我下载了这个软件包,似乎它需要安装,我不能在这个系统上进行安装。
2)重复。一直在看它,并坦率地说,我不明白它是如何工作的
我也试图将字符串分解成行并使用“for”来循环每一行,但这似乎是一个延迟的方法,可以适得其反。
非常欢迎所有的想法,谢谢。
的确不错,如果添加到re.MULTILINE re.compile(模式,re.MULTILINE)和$用来代替\ n,则它的工作原理。然而,我仍然不完全明白多线的作用。你可以解释吗? 此外,何时需要将字母'r'放在图案前面,何时不放? – 2014-09-03 19:20:06
您是否阅读过文档?这是清楚的解释。 – jonrsharpe 2014-09-03 19:21:57
我不明白为什么我需要在这种情况下分别对待每一行,如果我试图匹配的模式不在多行上运行,它不会从一行开始,并在另一行结束。 – 2014-09-04 20:21:02