2013-06-28 58 views
1

我對Regexp的東西非常不滿,所以我想不通爲什麼這不起作用。我只是想分配/等式中的兩個字符串匹配,這樣的事情:在Python中通過Regex匹配「...」=「...」

"string1" = "string2"

在這種情況下,我會想到「字符串1」和「字符串2」進行匹配(不帶引號)。我試過以下的正則表達式,這在正則表達式測試我發現在網絡上工作,但不是在Python:

("[^"]*").=.("[^"]*")

在Python它應該是這樣的:

matches = re.findall(r'("[^"]*").=.("[^"]*")', line)

但就像我說的那樣,它不起作用。

+0

什麼'print repr(line)'print? –

+0

與每個字符之間的\ x00混合的行。這是一種編碼問題嗎? – bompf

回答

4

移動引號捕獲組之外,如果你不希望他們成爲你的比賽的一部分:

>>> matches = re.findall(r'"([^"]*)".=."([^"]*)"', line) 
>>> matches 
[('string1', 'string2')] 

而且,由於你有空間在你的「=」,你應該只匹配空間。點「」。「匹配任何字符。

+0

奇怪的是,這在我的交互式CLI上正常工作,但不是在我想要使用的腳本中。我通過fileinput.input(...)讀取了這些行。我也試着匹配換行符'\ n',但沒有任何效果。 – bompf

+0

你的回答是正確的,但事實證明我的問題是我讀取的文件的編碼是UTF-16。我必須將'openhook = fileinput.hook_encoded(「utf-16」)'傳遞給fileinput.input(..),現在它似乎工作! – bompf