Python正则表达式:如何仅替换文本前的#号(排除花括号内)
解决方案:替换不在花括号内的#号
要实现只替换不在{{}}包裹中的#号、保留花括号内的#,可以用正则表达式的负向断言精准匹配目标字符。
正则表达式
(?<!{{)#(?!}})
正则规则解释
(?<!{{):负向回顾后发断言——检查当前#号的前面不是{{,直接排除{{#}}这类花括号内的##:匹配需要替换的目标#号(?!}}):负向前瞻断言——检查当前#号的后面不是}},进一步确保这个#不在花括号的闭合结构里
代码示例
Python
import re original_str = "test string {{#}}, {{#}} , #<any text>" result = re.sub(r'(?<!{{)#(?!}})', '', original_str) print(result) # 输出: test string {{#}}, {{#}} , <any text>
JavaScript
const originalStr = "test string {{#}}, {{#}} , #<any text>"; const result = originalStr.replace(/(?<!{{)#(?!}})/g, ''); console.log(result); // 输出: test string {{#}}, {{#}} , <any text>
针对性补充
如果你的场景只需要替换例子中逗号空格后的特定#号,可以用更精准的正则:
(?<=, )#
这个正则通过(?<=, )断言#号前是, ,只会匹配目标位置的#,不会影响其他可能存在的非花括号内#号。
内容的提问来源于stack exchange,提问作者Sanket Wagh
相关产品推荐
相关产品推荐

