[英]How to modify a text within string using regular expressions in python?
我正在尝试更改包含如下字符串的文件:
Record 1 :
{ "K1":"value1" ,
"K2":"value2"
}
Record 2 :
{ "K1":"value3" ,
"K2":"value4"
}
至
{
"Record_1" :
{ "K1": "value1",
"K2": "value2"
},
"Record_2" :
{ "K1": "value3",
"K2": "value4"
}
}
(以使其成为正确的JSON格式)。
我遇到问题的部分代码是:
pattern = r"(\s*)Record (\d+):"
all_records_json = re.sub(middle_pattern, "\"Record_"+ ??? + "\" : ",all_records)
而且我不知道要放什么而不是??? 以便它读取与模式匹配的(\\ d +)部分。
首先,您的模式首先与实际数据不匹配:
>>> all_records = '''Record 2 :
... { "K1":"value3" ,
... "K2":"value4"
... }'''
>>> pattern = r"(\s*)Record (\d+):"
>>> re.findall(pattern, all_records)
[]
那是因为您的数据在数字和冒号之间有一个空格。 您需要解决此问题。 当我们讨论它时,我不知道为什么要在前面的空格周围放置一个组,所以我们不要这样做。 这样我们得到:
>>> pattern = r"\s*Record (\d+)\s*:"
>>> re.findall(pattern, all_records)
[2]
现在,您唯一的捕获组是\\d+
。 因此,这将是第1组。您可以将其包括在\\1
。 所以:
>>> print(re.sub(pattern, r'"Record_\1": ', all_records))
"Record_2":
{ "K1":"value3" ,
"K2":"value4"
}
那仍然不是有效的JSON,但这正是您想要的,对吗?
如果您阅读文档,则re.sub
解释说:“后向引用,例如\\6
,将替换为模式中第6组匹配的子字符串。” 有关(…)
组和(?P<name>…)
组的反向引用的完整详细信息,请在正则表达式语法中查找它们。 您还应该阅读Regular Expression HOWTO ,它以一种对新手更友好的方式解释了所有这些内容。
注意,就像模式一样,我将替换设置为原始字符串,因此我不必转义\\1
,并且我也使用单引号而不是双引号,因此不必转义"
字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.