2011-02-05 80 views
0

我需要在文本字符串中查找,該字符串以=?開頭並以?=結尾並將其翻譯。我用這樣的表達結束:將utf8字符串拆分爲具有正則表達式的部分

re.sub('=\?[\w\?\-\/=\+\:\;_\,\[\]\(\)\<\>]+\?=', decode_match, string) 

它可以在95%的情況下,但它無法與類似的字符串:

=?utf-8asdfaDDS23=eFF?=-=?utf-8?eadf-,=?= 

有人可以嘗試幫助?

+0

你確定你的輸入是這樣嗎? –

+0

我喜歡jswolf的簡單回答,但是如果你在原始正則表達式的加號之後添加一個懶惰的量詞(例如''= \?[\ w \?\ - \/= \ + \:\; ,它應該也可以工作(在這裏測試:http://ideone.com/601LA) – 2011-02-05 09:15:29

+0

然後它更好'= \?(?) :[\ w \?\ - \/= \ + \:\; _ \,\ [\] \(\)\ <\>] +?)\?=' –

回答

0

你需要的情況下,你有嗎?在你的模式中沒有匹配?=

'=\?(?:[^?]|\?[^=])+\?=' 
+0

謝謝!你能解釋一下這個正則表達式嗎? –

+0

那麼,首先你匹配=?,然後你匹配一個或多個不是?與[^?]或一個?並且下一個字符與\?[^ =]不是一個=。 (?:)是一個非捕獲分組,因此它與使用parens而不獲取輸出變量相同。 – jswolf19

+1

如果分隔符前的最後一個字符是'?'(例如'=?utf-8asdf ?? ='),那麼這將不起作用。你的否定字符類('[^ =]')應該是負向前視('(?!=)')。 –

0

請問str.split('=?')有訣竅嗎?

+0

當你嘗試過時它有效嗎? –

0

你爲什麼不寫? :

re.sub('=\?.+?\?=', decode_match, string) 

此正則表達式將匹配兩次'= UTF-8asdfaDDS23 = EFF = - = UTF-8 eadf - ,= =?????

'=?utf-8asdfaDDS23=eFF?=' 

'=?utf-8?eadf-,=?=' 

難道你想?當喚起失敗時,你應該更加精確地給予它。

相關問題