python - 在 Python 中写一个正则表达式来获取一个子串

标签 python regex regex-negation

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

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

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

[动漫锦鲤] 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() 用于上述返回:

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

最佳答案

试试这个(s 是输入)。

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

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

关于python - 在 Python 中写一个正则表达式来获取一个子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214246/

相关文章:

ruby-on-rails - Rails 由最后一个分隔符分割

regex - Dart 正则表达式与阿拉伯语文本的整个单词不匹配

javascript - 匹配url中特定请求参数的正则表达式

c# - 除去除数字外的所有内容的正则表达式是什么?

python - 将大型 csv 文件从 NodeJS 发送到 python

python - 用函数打破 while 循环?

c# - 使用正则表达式仅匹配第 n 次出现

ios - 如何在 Swift 中组合正则表达式?

python - Scrapy 和代理

javascript - 如何 "Lock down"V8?