Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python re.findall-如何获得主匹配表达式?_Python_Regex_Python 3.x - Fatal编程技术网

Python re.findall-如何获得主匹配表达式?

Python re.findall-如何获得主匹配表达式?,python,regex,python-3.x,Python,Regex,Python 3.x,表达方式如下: re.findall("a(.*?)b",'..a12b..a23b..a45b..') 只提供分组匹配项:['12','23','45'] 如何获得a基匹配,即['a12b',a23b',a45b'] 当然,我可以手动输入它们,但是有没有一种更简单的方法,就像其他语言中的匹配[0]一样?只需删除括号即可。这就是返回的内容 >>> re.findall("a.*?b",'..a12b..a23b..a45b..') ['a12b', 'a23b', 'a45b

表达方式如下:

re.findall("a(.*?)b",'..a12b..a23b..a45b..')
只提供分组匹配项:
['12','23','45']

如何获得a基匹配,即
['a12b',a23b',a45b']


当然,我可以手动输入它们,但是有没有一种更简单的方法,就像其他语言中的
匹配[0]
一样?

只需删除括号即可。这就是返回的内容

>>> re.findall("a.*?b",'..a12b..a23b..a45b..')
['a12b', 'a23b', 'a45b'] 
添加另一对用于

>>> re.findall("(a(.*?)b)",'..a12b..a23b..a45b..')
[('a12b', '12'), ('a23b', '23'), ('a45b', '45')]
>>> zip(*_)
[('a12b', 'a23b', 'a45b'), ('12', '23', '45')]
注意(uu在解释器中获取最后输出的值)

所述

如果模式中存在一个或多个组,则返回组列表

所以只要删除
()
,它就可以返回整个模式

re.findall("a.*?b",'..a12b..a23b..a45b..')
如果必须使用组,请使用非捕获组:

re.findall("a(?:.*?)b",'..a12b..a23b..a45b..')

你是说除了改变捕获组之外?还是添加一个捕获组?或者在这种情况下,只需执行
['a'+match+'b'匹配中的匹配]
?谢谢。这给了我一个群体筑巢的想法,而且很有效
re.findall(“(a(.*b)”,“…a12b..a23b..a45b..”
达到了我想要的效果。你在
zip()
方法上击败了我,所以我刚刚删除了我的答案:)。
full_match,internal_match=zip(*re.findall('a(.*b'),string))