use*_*790 0 python regex variables
我试图匹配两个字符串变量,并希望捕获多个匹配.re.findall似乎是这项任务的明显选择,但它似乎并没有像我期望的那样工作.以下是一个例子:
a = 'a(pp)?le'
b = 'ale, apple, apol'
match = re.findall(a,b)
match
['','pp']
Run Code Online (Sandbox Code Playgroud)
但是,当我将相同的变量应用于re.search时,它会识别字符串中的嵌入式正则表达式,并获取第一个匹配项:
match = re.search(a,b)
match.group()
'ale'
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么re.findall不能在这个实例中工作?我希望如下:
match = re.findall(a,b)
match
['ale','apple']
Run Code Online (Sandbox Code Playgroud)
谢谢!
您正在使用捕获组,而您想要一个非捕获组:
a = 'a(?:pp)?le'
Run Code Online (Sandbox Code Playgroud)
正如正则表达式中的文档 (...)
中所述,将创建一个"捕获组",而re.findall的结果将只是在parens内部.
如果您只想对事物进行分组(例如,为了应用a ?
),则使用(?:...)
创建非捕获组的用途.在这种情况下,re.findall的结果将是整个正则表达式(或最大的捕获组).
re.findall
文档的关键部分是:
如果模式中存在一个或多个组,则返回组列表,
这解释了re.findall和re.search之间的结果差异.