2016-01-11 70 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")