在正则表达式 findall 中使用"|"时,我得到了 2 个项目的列表,其中一个是空白
的我尝试更改正则表达式格式几次,但没有任何效果。这是我在尝试不同变体后到目前为止所拥有的:
示例文件名:
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
您可以在其中一个备选方案中删除.?
,因为它不会影响匹配和匹配时的组值:
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)
查看 Python 演示
我看到您需要在每个字符串中获取第一个匹配项,因此,使用返回所有、多个匹配项re.findall
是没有意义的,re.search
应该足够了。
好的,我无法判断它是否会涵盖您的所有数据,但您可以尝试以下方法:
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']