正则表达式 - 匹配最后出现的括号

Posted

技术标签:

【中文标题】正则表达式 - 匹配最后出现的括号【英文标题】:Regex - Match last occurrence of parentheses 【发布时间】:2021-10-15 10:33:54 【问题描述】:

在下面的字符串中,我试图获取子字符串(2005, Penguin Classics) 子字符串。

Marshall B. Rosenberg 博士 - Anger_ Beyond 的惊人目的 愤怒管理_寻找礼物(非暴力沟通指南) (2005,企鹅经典)AAA.pdf

我这样做是为了将子字符串更改为 (2005)。

以下是我当前的解决方案,但它同时匹配 (Nonviolent Communication Guides)(2005, Penguin Classics)。有关如何解决此问题的任何想法?

import re

parentheses_pattern = "\(([^)]+)\)*$"
reg = re.search(parentheses_pattern, filename)
year = reg.group()
year = year[:5]+")"
filename = re.sub(parentheses_pattern,year,filename)

【问题讨论】:

【参考方案1】:

这可能有用吗?

\(\d+, .*\)

测试正则表达式的好地方是:https://rubular.com/

以防万一它派上用场! :)

【讨论】:

谢谢!如果第一个子字符串有前导数字,这不会失败吗? 这不是因为正则表达式中的逗号和空格。所以即使是:[...](23 Nonviolent Communication Guides) (2005, Penguin Classics)[...] 它仍然会选择你想要的子字符串。【参考方案2】:

也许这会有所帮助:

r"\(([^\)]+)\)[^\(]*$"

【讨论】:

谢谢!开头的 r 字符有什么用? 顺便说一句,它无法正常工作,因为它会在末尾截断文件扩展名 (.pdf) 我认为目标是匹配最后出现的括号中的内容——这就是模式的作用。不管怎样,你可以试试r"\(([^\)]+)\)(?=[^\(]*$)"

以上是关于正则表达式 - 匹配最后出现的括号的主要内容,如果未能解决你的问题,请参考以下文章

js 正则表达式获取小括号内的内容,不含括号

js中split正则表达式

用于匹配大括号中的每一行的正则表达式

Python正则表达式详解

正则表达式匹配对称小括号

使用正则表达式在嵌套括号外查找匹配项