Python re模块中如何匹配字面量括号?改写正则遇阻求助
解决Python正则匹配字面量括号的问题
你要匹配带字面量括号的内容(比如- (2024 Remaster)),之前的写法存在两个核心问题:
- 第一种尝试里,结尾的
)未转义,正则引擎会把它当成分组的结束符,而非字面量括号,导致匹配失败。 - 使用
re.escape时,仅处理了开头部分,结尾的)没做转义,导致这部分仍被识别为正则语法而非字面量。
给你两种可行的解决写法:
方法一:直接在原始字符串中转义所有字面量括号
把需要匹配的字面量(和)用\转义,注意首尾的括号都要转义,中间用于捕获的分组括号保持原样:
r' - \((\d{4}) Remaster\)'
解释:
\(和\)明确告诉正则引擎这是要匹配的字面量括号(\d{4})作为捕获年份的分组,正常保留正则语法即可
方法二:用re.escape处理字面量部分,拼接正则分组
把固定的字面量部分用re.escape转义,再和正则分组部分拼接,确保所有字面量特殊字符都被正确转义:
re.escape(' - (') + r'(\d{4}) Remaster' + re.escape(')')
re.escape会自动把(和)转成\(和\),中间的(\d{4})作为正则语法保留,不会被转义。
测试时,比如对字符串"Foo - (2020 Remaster) Bar",两种写法都能正确捕获到2020。
内容的提问来源于stack exchange,提问作者FlamebladeOmega
相关产品推荐
相关产品推荐

