我想问一下为什么第一个表达式没有从字符串“axxxbcd”输出('a'、'b'、'c'、'd')
import re
match = re.findall(r'(a).*?(b)?.*?(c)?(d)','awsssd axxxxxbcd ad adfdfdcdfdd
awsbdfdfdcd')
print (match)
输出[1]:[('a','',',','d'),('a',',',',','d'),('a',',',',','d'),('a',',',',','d')]
import re
match = re.findall(r'(a).*?(b)?(c)?(d)','awsssd axxxxxbcd ad adfdfdcdfdd awsbdfdfdcd')
print (match)
输出[2]:[('a'、'''、''、''、'd')、('a'、''、''、'、'、'd')、('a'、''、'、'、'、'd')、('a'、'、'、'、'、'、'、'd')]
不是正则表达式引擎的专家,但在内部,正则表达式引擎似乎会吃掉字符来填充第一个前的第二个
.*?
,跳过(b)?
部分,因为这是可选的。不确定是否足够清晰,但我想你会在regex101 debugger上看到的
也就是说,添加一点contrast而不是选择任何字符可以保存匹配:
演示here
相关问题 更多 >
编程相关推荐