我检查了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 ++中完美运行,但不在我的脚本中。
当我运行脚本时,我收到标题中提到的错误。这里有可能的解决方法吗?
答案 0 :(得分:1)
该组无法比拟,因为捕获组在负向前瞻中使用。如果匹配,则永远不会填充该组。
相反,请使用
re.sub(r'^(?!(?:topics/_Reuse.*)?$).*$', r'@@@@@\g<0>', s)
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>
反向引用。