正则表达式 - 匹配最后出现的括号
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"\(([^\)]+)\)(?=[^\(]*$)"
。以上是关于正则表达式 - 匹配最后出现的括号的主要内容,如果未能解决你的问题,请参考以下文章