Python 关于findall,带or逻辑
在regex findall中使用“|”时,我得到了一个包含2项的列表,其中哪一项是空的 我尝试过几次修改正则表达式的格式,但都没有效果。这是我在尝试了不同的变体后得到的结果: 文件名示例: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', ''
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']