我有这个片段
print(re.sub(r'(-script\.pyw|\.exe)?', '','.exe1.exe.exe'))
输出为1 如果我删除?从上面的代码段中以
运行print(re.sub(r'(-script\.pyw|\.exe)', '','.exe1.exe.exe'))
输出再次相同。 尽管我正在使用?,但它变得越来越贪婪,并且将所有的'.exe'替换为NULL。 有什么解决方法可以只替换首次出现的东西?
答案 0 :(得分:1)
re.sub(pattern, repl, string, count=0, flags=0)
这是re.sub
函数的签名。注意count
参数。如果只希望替换第一次出现的情况,请使用count=1
。
?
是重复运算符的非贪婪修饰符;当它紧挨其他任何东西时,它会使前一个元素成为可选元素。因此,您的头号表达式是用任何内容代替-script.pyw
或.exe
或什么也没有。由于一无所有不会改变字符串,因此顶部和底部版本(无法匹配空字符串)将得到相同的结果。
答案 1 :(得分:0)
问号使正则表达式中的前面的标记为可选 使用
print(re.sub(r'(-script\.pyw|\.exe)', '','.exe1.exe.exe', 1))
如果您只想删除第一个匹配项。
答案 2 :(得分:0)
?
是贪婪的。因此,如果可以匹配,它将匹配。
例如:aaab?
will match aaab
instead of aaa
为了使?
不贪心,您必须添加一个额外的?
(顺便说一下,这与使*
和+
不贪心的方法相同)
所以aaab??
will just match aaa
。然而,与此同时,aaab??c
will match aaabc