如何用Python re模块替换字符串时保留括号内文本?
嘿,这个问题其实是没用到正则的捕获组功能啦!你之前的代码是把匹配到的整个(spam): 直接删掉了,自然留不住括号里的内容。咱们调整一下正则,把要保留的部分“抓”出来就行:
解决方法
核心思路是用捕获组把括号内的文本提取出来,然后在替换的时候引用这个捕获到的内容:
import re # 使用原始字符串定义正则,避免转义字符的麻烦 result = re.sub(r'\((.+?)\): ', r' : \1 ', 'eggs (spam): tomatoes') print(result) # 输出: eggs : spam tomatoes
细节解释
正则表达式
r'\((.+?)\): ':\(和\):匹配实际的左右括号(因为括号在正则语法里是特殊字符,必须转义才能匹配字面量)(.+?):这是第一个捕获组,+?是非贪婪匹配模式,会精准捕获括号里的文本(直到遇到第一个右括号就停止,避免出现过度匹配的问题)::匹配括号后面的冒号和空格,确保只替换符合你描述的完整模式
替换字符串
r' : \1 ':\1:专门用来引用第一个捕获组捕获到的内容(也就是括号里的spam)- 前后的空格和冒号完全对应你想要的目标格式
如果你的长字符串里有多个这种模式,比如foo (bar): baz (qux): quux,这个正则也能正确处理,最终会输出foo : bar baz : qux quux。
内容的提问来源于stack exchange,提问作者ignoring_gravity
相关产品推荐
相关产品推荐

