三天里,我一直在尝试制作一个供我自己使用的图像/短视频标记系统,但这已被证明是一个超越我的挑战。
这些是字符串:
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
之后的最后一个标记