我为非描述性标题道歉,但我想不出更好的标题。
我正在尝试编写一个解析某些文件名中的子字符串的脚本。
因此,例如,这里有一个这样的文件名:
[Anime-Koi] GJ-bu - 07 [h264-720p][A8557259].mkv-00_07_33_00001.jpg
(这显然是动画片的截图。)
我想从这个名字得到的是GJ-bu - 07
子串。
我对正则表达式知之甚少,所以我一直在试图想出一个正则表达式。
我认为找到表达式的倒数非常容易,所以我想出了:
'(\[[a-zA-Z0-9_-]*\]?[.a-zA-Z0-9_-]*)'
Python的findall()
用于上述返回:
['[Anime-Koi]', '[h264-720p]', '[A8557259].mkv-00_07_33_00001.jpg']
不幸的是,我无法弄清楚如何得到反转,无论我多大程度地划伤我的大脑,我都无法想出能够满足我需要的正则表达式。
所以,呃,你们能帮助我想出一个返回GJ-bu - 07
的表达式吗?
我知道我可以作弊而且只是这样做:
f = "[Anime-Koi] GJ-bu - 07 [h264-720p][A8557259].mkv-00_07_33_00001.jpg"
reg_ex = r'(\[[a-zA-Z0-9_-]*\]?[.a-zA-Z0-9_-]*)'
p = re.compile(reg_ex)
l = p.findall(f)
for st in l:
f = f.replace(st, '')
但这是作弊,所以我宁愿不这样做。
感谢您的时间。
(注意:我正在使用Python 2.7,但我对使用3.2毫无疑问,不过我怀疑它在这里有所不同。)
答案 0 :(得分:3)
试试这个(s
是输入)。
re.search(r'(?:^|\s)([^[]*)(?=(?:\s|$))', s).group(1)
它实质上意味着,一个空格后跟任意数量的非[
字符,然后是一个空格。
答案 1 :(得分:1)
试试这个:
p = re.compile('\[.*\](\s.*\s)\[.*\].*\.jpg')
l = p.findall("[Anime-Koi] GJ-bu - 07 [h264-720p][A8557259].mkv-00_07_33_00001.jpg")
print l
答案 2 :(得分:1)
import re
pat = '\[.+?\] *(.+?) *\[.+?\]'
reg = re.compile(pat)
ss = '[Anime-Koi] GJ-bu - 07 [h264-720p][A8557259].mkv-00_07_33_00001.jpg'
print reg.findall(ss)