2016-01-11 75 views
0

我知道從這個question的是,在nothing to repeat一個正則表達式的表達,是蟒蛇的一個已知的bug。 但我必須編譯這個unicode表達式如何解決「無法重複」的正則表達式錯誤?

re.compile(u'\U0000002A \U000020E3') 

作爲一個獨特的字符。這是一個表情符號,是一個獨特的角色。 Python把這個字符串理解爲u'* \\u20e3',並且讓我'沒什麼可重複的'錯誤。 我環顧四周,但找不到任何解決方案。是否存在任何工作?

+0

如果你的意思是你要匹配那些符號從字面上看,不被視爲正則表達式模式,那麼你在下面有一個答案。 –

回答

5

這沒有什麼與你鏈接的問題。你沒有遇到錯誤。你的正則表達式只有一個特殊的字符(一個*),你沒有逃脫。

編譯成一個正則表達式之前,簡單地逃脫字符串:

re.compile(re.escape(u'\U0000002A \U000020E3')) 

現在,我作爲一個有點不確定爲什麼你代表*\U0000002A - 也許你可以澄清你的意圖在這裏?

+0

'u'\ U0000002A \ U000020E3''是一個表情符號。我必須在正則表達式中將其作爲單個字符來捕捉它。轉義它不起作用。但是,當我試圖編譯它時,'沒有重複錯誤'出現。 – emanuele

+0

Thomas,OP從文件中讀取它們(模式是「動態的」)。這個問題似乎與以前的OP的帖子有關。 –

+0

@emanuele雖然這個字符表示爲單個字符,但它在技術上並不是單個字符。這並不重要,但問題可能在其他地方。你能告訴你如何使用這個正則表達式和什麼輸入? –

0

您需要使用re.escape (如「托馬斯·奧羅斯科」答案顯示),但只使用它的一部分是動態的,例如:

print re.findall(u"cool\s*%s" % re.escape(u'\U0000002A \U000020E3'), 
       u"cool  * \U000020E3 crazy")