給定一個文本文件,我想匹配的字符用單引號分隔,但可能有零個或一個轉義的單引號,報價,以及零個或多個製表符和換行符(不轉義) - 我只想匹配文本。例如:Python正則表達式匹配單引號中的文本,忽略轉義引號(和製表符/換行符)
menu_item = 'casserole';
menu_item = 'meat
loaf';
menu_item = 'Tony\'s magic pizza';
menu_item = 'hamburger';
menu_item = 'Dave\'s famous pizza';
menu_item = 'Dave\'s lesser-known
gyro';
我要搶只有文本(和空格),忽略標籤/換行 - 我並不真正關心,如果逃跑報價出現在結果,只要它不影響比賽:
casserole
meat loaf
Tonys magic pizza
hamburger
Daves famous pizza
Dave\'s lesser-known gyro # quote is okay if necessary.
我必須設法創造一個正則表達式是幾乎做它 - 它處理的轉義引號,而不是新行:
menuPat = r"menu_item = \'(.*)(\\\')?(\t|\n)*(.*)\'"
for line in inFP.readlines():
m = re.search(menuPat, line)
if m is not None:
print m.group()
那裏肯定有很多正則表達式的問題 - 但大多數都使用Perl,如果有一個能夠做到我想要的,我無法弄清楚:)因爲我使用的是Python,所以我沒有注意它是否分佈在多個組中,很容易重新組合。
一些答案已經說過,只是用代碼解析文本。雖然我確信我可以做到這一點 - 我很關閉有一個工作正則表達式:)而且它似乎是應該是可行的。
更新:我剛剛意識到我正在做一個Python readlines()來獲得每一行,這顯然是分裂線傳遞給正則表達式。我正在考慮重新編寫它,但任何有關該部分的建議也會非常有幫助。
可能重複的,用於管理轉義字符項目像字符串文字](http://stackoverflow.com/questions/430759/regex-for-managing-escaped-characters-for-items-like-string-literals) – phooji 2011-03-27 22:28:45
不是重複 - 我試圖處理(非轉義的)換行符也打破了我的輸入數據。 – 2011-03-27 22:30:52
我同意,但我認爲無論如何都值得指出。只需使用're.MULTILINE'(http://docs.python.org/library/re.html#re.MULTILINE)匹配多行,'$'忽略/匹配endlines和'\ s'(相同的鏈接)匹配新聞空間。出來,蚱蜢;) – phooji 2011-03-27 22:47:44