Python re.findall只返回第一个字符
在Python3.6中,我有一个带有日期前缀的html文件列表。我想返回所有日期,所以我加入列表并使用一些正则表达式,如下所示:Python re.findall只返回第一个字符,python,regex,python-3.x,regex-lookarounds,Python,Regex,Python 3.x,Regex Lookarounds,在Python3.6中,我有一个带有日期前缀的html文件列表。我想返回所有日期,所以我加入列表并使用一些正则表达式,如下所示: import re snapshots = ['20180614_SII.html', '20180615_SII.html'] p = re.compile("(\d|^)\d*(?=_)") snapshot_dates = p.findall(' '.join(snapshots)) snapshot\u dates是一个列表,['2','2'],但我期待[
import re
snapshots = ['20180614_SII.html', '20180615_SII.html']
p = re.compile("(\d|^)\d*(?=_)")
snapshot_dates = p.findall(' '.join(snapshots))
snapshot\u dates
是一个列表,['2','2']
,但我期待['20180614','20180615']
。此处演示:。我缺少什么?您可以简化您的模式,使用\d+
而不是(\d | ^)\d*
:
p = re.compile("\d+(?=_)")
print(p.findall(' '.join(snapshots)))
#['20180614', '20180615']
但是,在这种情况下,您可能不需要regex
来实现所需的结果。您可以在上拆分字符串:
print([x.split("_")[0] for x in snapshots])
#['20180614', '20180615']
您是否尝试过:p=re.compile(r“\d*(?=))
?您的问题是创建了一个带有第一个括号的组。甚至像r”(:?\d | ^)\d*(?=|)
这样的东西都应该可以工作。你的正则表达式很奇怪。括号表示“catch”,是的,您只捕获了一个数字(匹配的是\d*
部分,应该在括号中)。这里最简单的正则表达式是(\d*)\u SII.html
,但正如pault所指出的,没有任何正则表达式更好