如何查找不一定使用所有带有*
和+
修饰符的字符的所有匹配项?
import regex as re
matches = re.findall("^\d+", "123")
print(matches)
# actual output: ['123']
# desired output: ['1', '12', '123']
字符串
我需要将匹配锚定到字符串的开头(因此是^
),但+
似乎甚至没有考虑更短长度的匹配。我尝试将overlapped=True
添加到findall
调用中,但这不会更改输出。
使正则表达式为非贪婪(^\d+?
)会使输出为['1']
、overlapped=True
或非贪婪。为什么不想继续寻找下去呢?
我总是可以自己创建更短的子字符串,然后用正则表达式检查这些子字符串,但这似乎效率很低,而且肯定有一种方法可以让正则表达式自己做到这一点。
s = "123"
matches = []
for length in range(len(s)+1):
matches.extend(re.findall("^\d+", s[:length]))
print(matches)
# output: ['1', '12', '123']
# but clunky :(
型
Edit:^\d+
正则表达式只是一个例子,但我需要它来处理任何可能的正则表达式。我应该事先说明这一点,我很抱歉。
4条答案
按热度按时间cbeh67ev1#
您可以将
overlapped=True
与PyPi正则表达式模块一起使用,并反向搜索(?r)
然后从re.findall反转结果列表
字符串
产出
型
查看Python演示。
wsewodh22#
那么一个积极的lookbehindAssert如何:
字符串
b91juud33#
使用标准库
re
:字符串
印刷品:
型
ekqde3dh4#
字符串
这稍微好一点,因为re.findall()只被调用一次