讓我們假設輸入是這樣的。實際上它更長,但爲了清晰起見,我會這樣離開它。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