python - 替换花括号中的逗号

标签 python json regex python-3.x

我尝试用花括号括起来的分号替换逗号。

示例字符串:

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/

相关文章:

python - 有没有办法在Scrapy的Crawlspider中获取 anchor 标记内的文本?

javascript - 如何根据键将对象数组拆分为不同的对象

java - Java 时间戳的奇怪问题

javascript - 如何限制 ext js 文本字段中的特定字符?

python - 使用不区分大小写的文本查询 pymongo

python - python排序方法中的键如何使用列表

python - keras中的全梯度下降

python - 在 python 语法错误中使用 ffmpeg 调整大小

java - ObjectMapper java.lang.NoSuchMethodError : com. fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z

java - 替换字符串中的括号