如何用Python正则表达式仅移除特定格式的{}与?,保留其他括号
解决方案
- 问题根源:你原来的正则
'[{?}]'属于字符集合匹配,会把所有单独的{、?、}字符全部删除,这才导致$1?里的?和{23ru里的{被误删。 - 正确思路:需要精准匹配完整的
{单个字符?}结构,只删除这类整体,不改动其他位置的括号和问号。
修正后的代码:
import re string = "aaaa{v?}a $1?{23ru{n?}kkkk" # 匹配 {任意单个字符?} 的完整结构 pattern = r'\{.\?\}' replace = '' new_string = re.sub(pattern, replace, string) print(new_string)
运行结果:aaaava $1?{23runkkkk,完全符合预期。
如果需要支持**花括号内是任意内容(不止单个字符)但结尾是?**的情况(比如{abc?}),可以用更通用的正则:
pattern = r'\{.*?\?\}'
这里用.*?做非贪婪匹配,确保只匹配到最近的?}结尾的目标结构。
内容的提问来源于stack exchange,提问作者Mr.ML.Engineer
相关产品推荐
相关产品推荐

