使用'|'时,我得到2个项目的清单在regex findall中,其中之一为空白
我尝试过几次更改正则表达式格式,但是没有任何效果。这是我尝试不同变体后到目前为止所拥有的:
文件名示例:
231_HELLO_01.jpg
01_HELLO_WORLD.jpg
HELLO_01_WORLD.jpg
代码
pattern = '_(\d{2}).?|^(\d{2})_'
finddupe = re.findall(pattern, filename)
输出看起来像这样
[('01', '')]
[('02', '')]
[('01', '')]
[('02', '')]
[('01', '')]
[('02', '')]
[('03', '')]
[('04', '')]
[('05', '')]
[('06', '')]
[('07', '')]
[]
我只是想获取没有空字符串和列表的数字。
正在寻找:
01
02
01
03
04
答案 0 :(得分:1)
您可以在其中一种方法中删除import re
pattern = re.compile('^(\d{2})_|_(\d{2})')
m = pattern.search('12_text')
finddupe = ""
if m:
finddupe = f"{m.group(1) or ''}{m.group(2) or ''}"
# finddupe = "{}{}".format(m.group(1) or '', m.group(2) or '') # for Python versions not supporting interpolation
print(finddupe)
,因为它不会影响匹配并在匹配时合并组值:
re.findall
请参见Python demo
我看到您需要在每个字符串中获得第一个匹配项,因此,使用re.search
来返回所有多个匹配项是毫无意义的,ModuleNotFoundError: No module named '_ssl'
就足够了。
答案 1 :(得分:0)
好的,我无法确定它是否可以覆盖您的所有数据,但是您可以尝试以下操作:
names = ["231_HELLO_01.jpg", "01_HELLO_WORLD.jpg", "HELLO_01_WORLD.jpg"]
result = re.findall("[^\d](\d{2})[^\d]", ' '.join(names))
运行后的结果值为:
>>> result
['01', '01', '01']