正则表达式打开了吗?python操作

2024-09-26 22:10:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想问一下为什么第一个表达式没有从字符串“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')]


Tags: 字符串importre表达式matchadprintfindall
1条回答
网友
1楼 · 发布于 2024-09-26 22:10:55

不是正则表达式引擎的专家,但在内部,正则表达式引擎似乎会吃掉字符来填充第一个前的第二个.*?,跳过(b)?部分,因为这是可选的。
不确定是否足够清晰,但我想你会在regex101 debugger上看到的

也就是说,添加一点contrast而不是选择任何字符可以保存匹配:

(a)[^bcd\s]*(b)?[^cd\s]*(c)?(d)

演示here

相关问题 更多 >

    热门问题