Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python re.findall只返回第一个字符_Python_Regex_Python 3.x_Regex Lookarounds - Fatal编程技术网

Python re.findall只返回第一个字符

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'],但我期待[

在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']
,但我期待
['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所指出的,没有任何正则表达式更好