我尝试用花括号括起来的分号替换逗号。
示例字符串:
text = "a,b,{'c','d','e','f'},g,h"
我知道它归结为回顾和回顾,但不知何故它不会像我希望的那样工作:
substr = re.sub(r"(?<=\{)(.+?)(,)(?=.+\})",r"\1;", text)
它返回:
a,b,{'c';'d','e','f'},g,h
但是,我的目标是:
a,b,{'c';'d';'e';'f'},g,h
知道如何实现这一目标吗? 非常感谢任何帮助:)
最佳答案
您可以匹配整个 block {...}
(使用 {[^{}]+}
)并仅用 lambda 替换其中的逗号:
import re
text = "a,b,{'c','d','e','f'},g,h"
print(re.sub(r"{[^{}]+}", lambda x: x.group(0).replace(",", ";"), text))
参见 IDEONE demo
输出:a,b,{'c';'d';'e';'f'},g,h
通过声明 lambda x
,我们可以访问每个匹配对象,并使用 x.group(0)
获取整个匹配值。然后,我们只需要用分号替换逗号即可。
此正则表达式不支持递归模式。要使用递归模式,您需要 PyPi regex module .像 m = regex.sub(r"\{(?:[^{}]|(?R))*}", lambda x: x.group(0).replace(",", ";"), text)
应该可以工作。
关于python - 替换花括号中的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787379/