gpt4 book ai didi

Python 正则表达式 : Search and replace a character except when outside braces

转载 作者:太空宇宙 更新时间:2023-11-04 09:02:39 27 4
gpt4 key购买 nike

我正在处理 Python 中的一个问题,我需要在字符串中的任何位置搜索和替换特定字符,但位于大括号之间的字符除外。当字符位于大括号之间时,我知道如何执行此操作,但不知道何时位于大括号之外。本质上,我希望搜索跳过两个定界符之间的任何内容。

我目前的解决方法是对整个字符串执行搜索和替换,然后在大括号之间再次搜索和替换以撤消上次替换的那部分。

这是我正在寻找的功能示例:

import re
>>> str = 'I have a _cat, here is a pic {cat_pic}. Another_pic {cat_figure}'
>>> re.sub(regex1,'/_',str)
'I have a /_cat, here is a pic {cat_pic}. Another/_pic {cat_figure}'

我目前使用的解决方案是一个两步过程,如下所示:

import re
>>> str = 'I have a _cat, here is a pic {cat_pic}. Another_pic {cat_figure}'
>>> s1 = re.sub('_','/_',str)
>>> s1
'I have a /_cat, here is a pic {cat/_pic}. Another/_pic {cat/_figure}'
>>> s2 = re.sub(r'\{(.+?)/_(.+?)\}', r'{\1_\2}', s1)
>>> s2
'I have a /_cat, here is a pic {cat_pic}. Another/_pic {cat_figure}'

有没有办法使用正则表达式来做到这一点是一条语句,或者当前的两步过程是最干净的方法吗?

谢谢

最佳答案

假设所有大括号都是平衡的,您可以尝试使用这种Lookahead 组合。

>>> re.sub(r'(?=_)(?![^{]*\})', '/', str)

解释:

(?=       look ahead to see if there is:
_ '_'
) end of look-ahead
(?! look ahead to see if there is not:
[^{]* any character except: '{' (0 or more times)
\} '}'
) end of look-ahead

regex101 demo

关于Python 正则表达式 : Search and replace a character except when outside braces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com