Python regexp(sre_constants.error:不匹配的组)

时间:2016-12-29 17:24:33

标签: python regex

我检查了Stackoverflow上的所有相关帖子,但没有一个答案有帮助。我在列表中有以下项目:

topics\Utmutatok\Uzemeltetoi_Utmutato.dita
topics\_Reuse\Definitions\FRP_CUST_PROD_properties.xml
topics\_Reuse\Definitions\FRP_properties.xml
topics\_Reuse\Definitions\FR_Definitions.dita

我在python文件中使用以下行:

kifejezes5 = re.sub(r'^(?!(?:topics/_Reuse(.*?)|^$)$|$).*$', r'@@@@@.\1', kifejezes4)

表达式在Notepad ++中完美运行,但不在我的脚本中。

当我运行脚本时,我收到标题中提到的错误。这里有可能的解决方法吗?

1 个答案:

答案 0 :(得分:1)

该组无法比拟,因为捕获组在负向前瞻中使用。如果匹配,则永远不会填充该组。

相反,请使用

re.sub(r'^(?!(?:topics/_Reuse.*)?$).*$', r'@@@@@\g<0>', s)

请参阅online Python demo

import re
s = 'topics\_Reuse\Definitions\FRP_CUST_PROD_properties.xml'
res = re.sub(r'^(?!(?:topics/_Reuse.*)?$).*$', r'@@@@@\g<0>', s)
print(res)
# => @@@@@topics\_Reuse\Definitions\FRP_CUST_PROD_properties.xml

模式匹配:

  • ^ - 字符串开头
  • (?!(?:topics/_Reuse.*)?$) - 未跟随topics/_Reuse,然后跟随字符串结尾的任何0+字符或字符串的结尾(字符串不能为空)
  • .*$ - 任何0+字符(换行符除外)直到字符串结尾。

替换模式包含对整个匹配的\g<0>反向引用。