You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何编写正则表达式精准匹配所有{\...}格式字符串实现特殊字符替换

解决Python正则匹配{\xxx}格式占位符问题

错误原因

  • 原正则r'\{\\?[^{}]*}'中\\?表示反斜杠为可选项,因此会匹配到{'some_text}这类没有反斜杠前缀的不符合要求的内容
  • 原替换函数使用了Python不存在的substring.substringByChar方法,逻辑冗余,可通过正则分组直接提取内容简化实现

修正后的正则

要精准匹配{\任意字符组合}格式的占位符,只需强制要求{后必须紧跟反斜杠,修改为:

r'\{\\[^{}]*\}'

如果需要兼容更复杂的场景,可以加非贪婪匹配优化,避免极端情况的匹配错误:

r'\{\\.*?\}'

完整可运行代码

import re

text = "F.N. Freitas, C. Singulani, G. Vila-Verde, Linea Science Server,: The Dark Energy Survey Data Release 2. Ap._J._Supp._Ser. 255, (2021).Alam S., A. de Mattia, A. Tamone, S. {\' A}vila, J.A. Peacock, V. Gonzalez-Perez, A. Smith, A. Raichoor, A.J. Ross, J.E. Bautista, E. Burtin, J. Comparat, K.S. Dawson, H. du Mas des Bourboux, S. Escoffier, H. Gil-Mar{\'\'i}n, S. Habib, K. Heitmann, J. Hou, F.G. Mohammad, E.M. Mueller, R. Neveux, R. Paviot, W.J. Percival, G. Rossi, V. Ruhlmann-Kleider, R. Tojeiro, M. Vargas Maga{\~n}a, C. Zhao, G.B. Zhao: The completed SDSS-IV extended Baryon Oscillation Spectroscopic Survey: N-body mock challenge for the eBOSS emission line galaxy sample. Mon._Not._R._Astron._Soc. 504, (2021).Alam S., J.A. Peacock, D.J. Farrow, J. Loveday, A.M. Hopkins: Using GAMA to probe the impact of small-scale galaxy physics on nonlinear redshift-space distortions. Mon._Not._R._Astron._Soc. 503, (2021).Alam S., M. Aubert, S. Avila, C. Balland, J.E. Bautista, M.A. Bershady, D. Bizyaev, M.R. Blanton, A.S. Bolton, J. Bovy, J. Brinkmann, J.R. Brownstein, E. Burtin, S. Chabanier, M.J. Chapman, P.D. Choi, C.H. Chuang, J. Comparat, M.C. Cousinou, A. Cuceu, K.S. Dawson, S. de la Torre, A. de Mattia, V.S. Agathe, H.M. des Bourboux, S. Escoffier, T. Etourneau, J. Farr, A. Font-Ribera, P.M. Frinchaboy, S. Fromenteau, H. Gil-Mar{\'\'i}n, J.M. Le Goff, A.X. Gonzalez-Morales, V. Gonzalez-Perez, K. Grabowski, J. Guy, A.J. Hawken, J. Hou, H. Kong, J. Parker, M. Klaene, J.P. Kneib, S. Lin, D. Long, B.W. Lyke, A. de la Macorra, P. Martini, K. Masters, F.G. Mohammad, J. Moon, E.M. Mueller, A. Mu{\~n}oz-Guti{\'e}rrez, A.D. Myers, S. Nadathur, R. Neveux, J.A. Newman, P. Noterdaeme, A. Oravetz, D. Oravetz, N. Palanque-Delabrouille, K. Pan, R. Paviot, W.J. Percival, I. P{\'e}rez-R{\`a}fols, P. Petitjean, M.M. Pieri, A. Prakash, A. Raichoor, C. Ravoux, M. Rezaie, J. Rich, A.J. Ross, G. Rossi, R. Ruggeri, V. Ruhlmann-Kleider, A.G. S{\'a}nchez, F.J. S{\'a}nchez, J.R. S{\'a}nchez-Gallego, C. Sayres, D.P. Schneider, H.J. Seo, A. Shafieloo, A. Slosar, A. Smith, J. Stermer, A. Tamone, J.L. Tinker, R. Tojeiro, M. Vargas-Maga{\~n}a, A. Variu, Y. Wang, B.A. Weaver, A.M. Weijmans, C. Y{\`e}che, P. Zarrouk, C. Zhao, G.B. Zhao, Z. Zheng: Completed SDSS-IV extended Baryon Oscillation Spectroscopic Survey: Cosmological implications from two decades of spectroscopic surveys at the Apache Point Observatory. Physical_Review_D 103, (2021).Alam S., N.P. Ross, S. Eftekharzadeh, J.A. Peacock, J. Comparat, A.D. Myers, A.J. Ross: Quasars at intermediate redshift are not special; but they are often satellites. Mon._Not._R._Astron._Soc. 504, (2021).Alonso-Herrero A., S. Garc{\'\'i}a-Burillo, S.F. H{\"o}nig, I. Garc{\'\'i}a-Bernete, C. Ramos Almeida, O. Gonz{\'a}lez-Mart {'hallo}"

encodings = {
    "'": u'\u0300',
    "'\\": u'\u0301',
    "^": u'\u0302',
    "~": u'\u0303',
    "o":  u'\u00D8',
    "ss": 'ß'
}

def repl(m):
    # 分组直接提取大括号内的内容,省去手动查找括号位置的步骤
    inner_content = m.group(1).strip()
    # 可根据实际占位符规则调整拆分逻辑,此处默认最后一位是要加变音符号的目标字符,前面为编码标记
    encoding = inner_content[:-1]
    target_char = inner_content[-1]
    # 找不到对应编码则返回原字符
    diacritic = encodings.get(encoding, '')
    return target_char + diacritic

changed_text = re.sub(r'\{\\([^{}]*)\}', repl, text)
print(changed_text)

优化说明

  • 正则通过分组直接提取大括号内部内容,代码更简洁
  • 完全过滤了{'some_text}这类无反斜杠的不符合要求的内容
  • 拆分逻辑可根据实际占位符规则灵活调整,适配性更强

内容的提问来源于stack exchange,提问作者David Haase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:54:01