python中的正则表达式操作

python中的正则表达式操作,python,regex,Python,Regex,我到regex才2天大 我有一个小问题 当我使用下面的正则表达式语句时 re.findall('([ad])[\-.\s+]([be])[\-.\s+]([cf])*', 'a-b-c d-e-f') 我收到一个输出 [('a', 'b', 'c'), ('d', 'e', 'f')] 然而,我想要的输出是 ['a-b-c', 'd-e-f'] 我试过?、$和其他表达方式,但还没有成功 请让我知道,如果表达可以塑造一点,以获得渴望的输出 谢谢string.split有什么问题吗 或 使用r

我到regex才2天大

我有一个小问题

当我使用下面的正则表达式语句时

re.findall('([ad])[\-.\s+]([be])[\-.\s+]([cf])*', 'a-b-c d-e-f')
我收到一个输出

[('a', 'b', 'c'), ('d', 'e', 'f')]
然而,我想要的输出是

['a-b-c', 'd-e-f']
我试过?、$和其他表达方式,但还没有成功

请让我知道,如果表达可以塑造一点,以获得渴望的输出

谢谢

string.split有什么问题吗

使用re.finditer。这和a-b.c不匹配

string.split怎么了

使用re.finditer。这和a-b.c不匹配

捕获整个字符串并对其余部分使用非捕获组。findall返回所有捕获的组(如果存在)

输出:['a-b-c','d-e-f']

捕获整个字符串并对其余部分使用非捕获组。findall返回所有捕获的组(如果存在)


输出:['a-b-c','d-e-f']

您的所有信件周围都有捕获组。如果您使用单个捕获组,那么您将得到您想要的。此外,您应该去掉尾随“*”,因为它匹配空白字符串:

>>> re.findall('([ad][\-.\s+][be][\-.\s+][cf])', 'a-b-c d-e-f')
['a-b-c', 'd-e-f']

你的所有信件周围都有捕捉组。如果您使用单个捕获组,那么您将得到您想要的。此外,您应该去掉尾随“*”,因为它匹配空白字符串:

>>> re.findall('([ad][\-.\s+][be][\-.\s+][cf])', 'a-b-c d-e-f')
['a-b-c', 'd-e-f']
>>> l = []
>>> for i in re.finditer(r'\b[ad]([-.\s+])[be]\1[cf]\b', 'a-b-c d-e-f'):
        l.append(i.group())


>>> l
['a-b-c', 'd-e-f']
print re.findall('((?:[ad])[\-.\s+](?:[be])[\-.\s+](?:[cf])*)', 'a-b-c d-e-f')
>>> re.findall('([ad][\-.\s+][be][\-.\s+][cf])', 'a-b-c d-e-f')
['a-b-c', 'd-e-f']