查找定界符之间的所有匹配项

时间:2019-04-15 13:25:56

标签: python regex

我正在尝试查找!!之间的所有单个字母。

例如,字符串!abc!应该返回三个匹配项:abc

我尝试了正则表达式!([a-z])+!,但是它只返回一个匹配项:c!(([a-z])+)!也无济于事。

import re

s = '!abc!'
print(re.findall(r'!([a-z])+!', s))

UPD:不用说,它也应该与!abcdef!之类的字符串一起使用。分隔符之间的字符数不固定。

4 个答案:

答案 0 :(得分:1)

您应该将捕获组放在([a-z]+)周围,包括整个重复项。然后,您可以使用list()将匹配项转换为单个字母的列表。

s = '!abc!'
result = re.findall(r'!([a-z]+)!', s)
print list(result[0])

答案 1 :(得分:0)

(?<=!.*)\w(?=.*!)应该分别返回每个字符所需的结果

答案 2 :(得分:0)

好的,我正在回答自己的问题。感谢this answer找到了解决方案。

首先,需要一个备用的regex模块,因为下面的正则表达式使用\G锚。

这是正则表达式:

(?:!|\G(?!^))\K([a-z])(?=(?:[a-z])*!)

像魅力一样工作。

import regex

s = '!abcdef!'
print(regex.findall(r'(?:!|\G(?!^))\K([a-z])(?=(?:[a-z])*!)', s))

打印['a', 'b', 'c', 'd', 'e', 'f']

答案 3 :(得分:-1)

我调查了您的问题,请遵循您的表达方式中的以下逻辑

s = '!abc!'
print(re.findall(r'!([a-z])([a-z])([a-z])!',s))

每个字符被分成几组,以分别将它们放在一个数组中。