怎么 ?在python中的正则表达式中使用?

时间:2018-08-01 03:48:21

标签: regex python-3.x

我有这个片段

print(re.sub(r'(-script\.pyw|\.exe)?', '','.exe1.exe.exe'))

输出为1 如果我删除?从上面的代码段中以

运行
print(re.sub(r'(-script\.pyw|\.exe)', '','.exe1.exe.exe'))

输出再次相同。 尽管我正在使用?,但它变得越来越贪婪,并且将所有的'.exe'替换为NULL。 有什么解决方法可以只替换首次出现的东西?

3 个答案:

答案 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