python - 如何从括号中删除所有内容,除非它包含给定的关键字

标签 python regex python-3.x

所以我有这段代码来过滤掉传入字符串中的单词:

RemoveWords = "\\b(official|videoclip|clip|video|mix|ft|feat|music|HQ|version|HD|original|extended|unextended|vs|preview|meets|anthem|12\"|4k|audio|rmx|lyrics|lyric|international|1080p)\\b"
result = re.compile(RemoveWords, re.I)

这是一种解决方法,因为我刚刚开始使用 Python。 现在理想的情况如下:

If the parens contain the words 'remix' or 'edit': don't remove text within parens. Otherwise remove everything from the parens including the parens itself.

例如,如果标题如下所示:

AC/DC - T.N.T. (from Live at River Plate)

括号之间的所有内容都必须删除。

但是如果标题看起来像这样:

AC/DC - T.N.T. (Dj Example Remix)

不要删除括号之间的文本,因为它包含单词 remix。

我知道如何删除与正则表达式匹配的单词,但我不知道如何将其保留在括号之间,也不知道如何删除其中不包含给定单词的所有内容。

我尝试查找正则表达式以了解如何将其限制在括号之间,但我无法弄清楚,因为我对正则表达式总体来说也是新手。

最佳答案

使用re.finditer()re.search()函数的解决方案:

import re
titles = 'AC/DC - T.N.T. (from Live at River Plate) AC/DC - T.N.T. (Dj Example Remix)'
result = titles

for m in re.finditer(r'\([^()]+\)', titles):
    if not re.search(r'\b(remix|edit)\b', m.group(), re.I):
        result = re.sub(re.escape(m.group()), '', result)

print(result)

输出:

AC/DC - T.N.T.  AC/DC - T.N.T. (Dj Example Remix)

关于python - 如何从括号中删除所有内容,除非它包含给定的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45772872/

相关文章:

python - 将标准输出子处理到文件,缺少新行

javascript - 如何获取多行中的值

regex - 将文本从一行复制到另一行

python - 从 PyQt GUI 连接到串口

python - 如何设置 Tkinter 小部件的大小(以像素为单位)?

python - 使用 python-pptx 设置主题

python - 小图像分类任务的 Conv2d 层和滤波器的数量

python re.X vs automagic 行延续

mysql - 通过正则表达式匹配进行 SQL 查询

python - 排序列表时嵌套的 lambda 语句