Python 关于findall,带or逻辑

Python 关于findall,带or逻辑,python,regex,Python,Regex,在regex findall中使用“|”时,我得到了一个包含2项的列表,其中哪一项是空的 我尝试过几次修改正则表达式的格式,但都没有效果。这是我在尝试了不同的变体后得到的结果: 文件名示例: 231_HELLO_01.jpg 01_HELLO_WORLD.jpg HELLO_01_WORLD.jpg 代码 输出如下所示 [('01', '')] [('02', '')] [('01', '')] [('02', '')] [('01', '')] [('02', '')] [('03', ''

在regex findall中使用“|”时,我得到了一个包含2项的列表,其中哪一项是空的

我尝试过几次修改正则表达式的格式,但都没有效果。这是我在尝试了不同的变体后得到的结果:

文件名示例:

231_HELLO_01.jpg
01_HELLO_WORLD.jpg
HELLO_01_WORLD.jpg
代码

输出如下所示

[('01', '')]
[('02', '')]
[('01', '')]
[('02', '')]
[('01', '')]
[('02', '')]
[('03', '')]
[('04', '')]
[('05', '')]
[('06', '')]
[('07', '')]
[]
我只是想得到没有空字符串和列表的号码

寻找:

01
02
01
03
04

您可以在其中一个备选方案中删除
,因为它不会影响匹配时的匹配和concat组值:

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
没有任何意义,
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']

也许
finddupe='''.join(*finddupe)
?实际上没有什么区别。你能举个真实的例子吗?变量文件名的实际值是多少?请参见edits@Brunoluvizotton,而不需要字符串开头的特殊情况等,可能只是
.split()
\uu
和/或
上的字符串,并检查哪些部分与2位模式匹配?
>>> result
['01', '01', '01']