【问题标题】:How to fix "nothing to repeat" regex error?如何修复“没有重复”的正则表达式错误?
【发布时间】:2016-04-15 14:36:32
【问题描述】:

我从这个question 知道,正则表达式中的nothing to repeat 是python 的一个已知错误。 但我必须编译这个 unicode 表达式

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

作为一个独特的角色。这是一个表情符号,是一个独特的角色。 Python 将此字符串理解为 u'* \\u20e3' 并让我出现“无需重复”错误。 我环顾四周,但找不到任何解决方案。是否存在任何解决方法?

【问题讨论】:

  • 如果您的意思是要按字面意思匹配这些符号,而不是视为正则表达式模式,那么您在下面有一个答案。

标签: python regex python-2.7


【解决方案1】:

您需要使用 re.escape (如“Thomas Orozco”答案所示) 但只能在动态的部分使用它,例如:

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

【讨论】:

    【解决方案2】:

    这与您链接的问题无关。你没有遇到错误。您的正则表达式只是有一个您没有转义的特殊字符(*)。

    在将字符串编译成正则表达式之前,只需对字符串进行转义:

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

    现在,我有点不确定您为什么将 * 表示为 \U0000002A — 也许您可以澄清一下您的意图是什么?

    【讨论】:

    • u'\U0000002A \U000020E3' 是一个表情符号。我必须在正则表达式中将其作为单个字符捕获。逃避它是行不通的。但是当我尝试编译它时,出现“没有重复错误”。
    • Thomas,OP 从文件中读取它们(模式是“动态的”)。这个问题似乎与之前OP的帖子有关。
    • @emanuele 虽然此字符表示为单个字符,但从技术上讲,它不是单个字符。不过这并不重要——问题可能出在其他地方。你能展示你如何使用这个正则表达式以及在什么输入上?
    • @ThomasOrozco 当然。这个问题与另一个问题有关:stackoverflow.com/questions/34681364/… 我有一个文件,它是作为 ascii 字符串的表情符号列表。 ascii 字符串代表 unicodes 字符串。当 * 存在时,我的代码会中断。
    猜你喜欢
    • 2021-05-18
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多