Python findall中的正则表达式析取与完整子字符串不匹配

Python findall中的正则表达式析取与完整子字符串不匹配,python,regex,Python,Regex,在一些在线测试程序中,regexa(b | c)z匹配字符串“abz acz”中的“abz”和“acz”,但Python的re.findall()只匹配“b”和“c” 我错过了什么 In[42]: re.findall(r'a(b|c)z', 'abz acz') Out[42]: ['b', 'c'] 那是因为你正在使用捕获参数 re.findall(r'a(?:b|c)z', 'abz acz') ?:将导致它成为非捕获括号这是因为您使用的是捕获括号 re.findall(r'a(?:b

在一些在线测试程序中,regex
a(b | c)z
匹配字符串“abz acz”中的“abz”和“acz”,但Python的re.findall()只匹配“b”和“c”

我错过了什么

In[42]: re.findall(r'a(b|c)z', 'abz acz')
Out[42]: ['b', 'c']

那是因为你正在使用捕获参数

re.findall(r'a(?:b|c)z', 'abz acz')

?:
将导致它成为非捕获括号

这是因为您使用的是捕获括号

re.findall(r'a(?:b|c)z', 'abz acz')

?:
将导致它成为非捕获括号

这是因为您使用的是捕获括号

re.findall(r'a(?:b|c)z', 'abz acz')

?:
将导致它成为非捕获括号

这是因为您使用的是捕获括号

re.findall(r'a(?:b|c)z', 'abz acz')

?:
将使其成为非捕获括号

使用
findall
,捕获的组将返回:

如…中所述

返回字符串中模式的所有非重叠匹配项,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。空匹配将包含在结果中,除非它们触及另一个匹配的开头

您只需在此处使用

>>> re.findall(r'a[bc]z', 'abz acz')
['abz', 'acz']

使用
findall
,将返回捕获的组:

如…中所述

返回字符串中模式的所有非重叠匹配项,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。空匹配将包含在结果中,除非它们触及另一个匹配的开头

您只需在此处使用

>>> re.findall(r'a[bc]z', 'abz acz')
['abz', 'acz']

使用
findall
,将返回捕获的组:

如…中所述

返回字符串中模式的所有非重叠匹配项,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。空匹配将包含在结果中,除非它们触及另一个匹配的开头

您只需在此处使用

>>> re.findall(r'a[bc]z', 'abz acz')
['abz', 'acz']

使用
findall
,将返回捕获的组:

如…中所述

返回字符串中模式的所有非重叠匹配项,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。空匹配将包含在结果中,除非它们触及另一个匹配的开头

您只需在此处使用

>>> re.findall(r'a[bc]z', 'abz acz')
['abz', 'acz']

谢谢,对我来说,这个答案解决了根本问题:我不知道捕获括号和非捕获括号之间的区别。请看,谢谢,对我来说,这个答案解决了根本问题:我不知道捕获括号和非捕获括号之间的区别。请看,谢谢,对我来说,这个答案解决了根本问题:我不知道捕获括号和非捕获括号之间的区别。请看,谢谢,对我来说,这个答案解决了根本问题:我不知道捕获括号和非捕获括号之间的区别。看见