1

我为这个非描述性的标题道歉,但我想不出更好的标题。

我正在尝试编写一个从某些文件名中解析子字符串的脚本。

因此,例如,这是一个这样的文件名:

[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_-]*)'

Pythonfindall()用于上述返回:

['[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 没有任何疑虑,尽管我怀疑它在这里会有所不同。)

4

3 回答 3

3

试试这个(s是输入)。

re.search(r'(?:^|\s)([^[]*)(?=(?:\s|$))', s).group(1)

它本质上意味着一个空格,后跟任意数量的非[字符,然后是一个空格。

于 2013-03-05T01:33:13.160 回答
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
于 2013-03-05T01:34:35.040 回答
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)
于 2013-03-05T01:37:20.177 回答