我正在尝试查找!
和!
之间的所有单个字母。
例如,字符串!abc!
应该返回三个匹配项:a
,b
,c
。
我尝试了正则表达式!([a-z])+!
,但是它只返回一个匹配项:c
。 !(([a-z])+)!
也无济于事。
import re
s = '!abc!'
print(re.findall(r'!([a-z])+!', s))
UPD:不用说,它也应该与!abcdef!
之类的字符串一起使用。分隔符之间的字符数不固定。
答案 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))
每个字符被分成几组,以分别将它们放在一个数组中。