正则表达式排除目录,捕获以逗号分隔的文件名,排除"(number)"和扩展名


在过去的

三天里,我一直在尝试制作一个供我自己使用的图像/短视频标记系统,但这已被证明是一个超越我的挑战。

这些是字符串:

d:imagestagging 1GIFskung fu panda, fight.webm
d:imagestagging 1GIFskung fu panda, fight (2).webm
d:imagestagging 1GIFskung fu panda 2, fight.webm
d:imagestagging 1GIFskung fu panda 2, fight (2).webm
d:imagestagging 1GIFspulp fiction, samuel l. jackson, angry, funny.webm

我尝试修改了四件事以实现我想要的,但没有成功:

(?<=d:\images\taggings1\GIFs\)([ws])+
([a-z0-9]s?)+
(?<=\)[^\]*?(?=..*$)
[^\/:*?"<>|rn]+$

1 几乎在那里,但它不会超过第一个逗号。

2 这几乎可以完成所有操作,但我还没有找到排除目录、(#) 和扩展名的方法。

3 取自互联网,捕获"l."并停在那里,整个文件名,不能随心所欲地使用逗号,捕获 (#)。

4 取自正则表达式(是的,我实际上是在绝望中购买的),捕获 (#) 和扩展。

@timgeb

目的是获取不带逗号、(#) 和扩展名的文件名,因此:

"kung fu panda" "fight"
"kung fu panda" "fight"
"kung fu panda 2" "fight"
"kung fu panda 2" "fight"
"pulp fiction" "samuel l. jackson" "angry" "funny"

你的问题不是很清楚,但我认为你想解析文件名。如果是这种情况,我不建议使用re作为您的主要工具。

相反,请查看os.path

import os.path  # Or `import ntpath` for Windows paths on non-Windows systems
dir, file_name = os.path.split('d:imagestagging 1GIFskung fu panda, fight (2).webm')
# dir = 'd:imagestagging 1GIFs'
# file_name = 'kung fu panda, fight (2).webm'
root, ext = os.path.splitext(file_name)
# root = 'kung fu panda, fight (2)'
# ext = '.webm'

现在你有一个更简单的问题:删除括号中的数字。

获取基名称,用空字符串替换括号中的整数和扩展名,并去除空格。

from ntpath import basename
import re
map(str.strip, re.sub('(d+)|.w+$', '', basename(s)).split(','))

演示:

>>> s = 'd:imagestagging 1GIFskung fu panda, fight.webm'
>>> map(str.strip, re.sub('(d+)|.w+$', '', basename(s)).split(','))
['kung fu panda', 'fight']
>>> s = 'd:imagestagging 1GIFskung fu panda, fight (2).webm'
>>> map(str.strip, re.sub('(d+)|.w+$', '', basename(s)).split(','))
['kung fu panda', 'fight']
>>> s = 'd:imagestagging 1GIFskung fu panda 2, fight.webm'
>>> map(str.strip, re.sub('(d+)|.w+$', '', basename(s)).split(','))
['kung fu panda 2', 'fight']
>>> s = 'd:imagestagging 1GIFskung fu panda 2, fight (2).webm'
>>> map(str.strip, re.sub('(d+)|.w+$', '', basename(s)).split(','))
['kung fu panda 2', 'fight']
>>> s = 'd:imagestagging 1GIFspulp fiction, samuel l. jackson, angry, funny.webm'
>>> map(str.strip, re.sub('(d+)|.w+$', '', basename(s)).split(','))
['pulp fiction', 'samuel l. jackson', 'angry', 'funny']

如果我得到你,你想要最后一个标签(功夫熊猫,战斗.webm)在1GIFs之后 - 如果您添加更多内容字符串,那么我可以为您规范化代码。 此代码仅提取标签并生成常规列表。 进口再

s="""d:imagestagging 1GIFskung fu panda, fight.webm
d:imagestagging 1GIFskung fu panda, fight (2).webm
d:imagestagging 1GIFskung fu panda 2, fight.webm
d:imagestagging 1GIFskung fu panda 2, fight (2).webm
d:imagestagging 1GIFspulp fiction, samuel l. jackson, angry, funny.webm"""
lines = s.split('n')# Just generate a list of lines
for t in lines:
    data = re.search(r'1\GIFs\(.+$)',t)
    print data.group(1).split(',')

输出-

['kung fu panda', ' fight.webm']
['kung fu panda', ' fight (2).webm']
['kung fu panda 2', ' fight.webm']
['kung fu panda 2', ' fight (2).webm']
['pulp fiction', ' samuel l. jackson', ' angry', ' funny.webm']

表达式 1\GIFs\(.+$) 将捕获 1\GIFs 之后的最后一个标记

观看现场演示

最新更新