【发布时间】:2016-10-20 18:58:27
【问题描述】:
我正在尝试替换仅在 JSON 文本字符串中的另一个单词之后出现的单词。我一直在努力使用正则表达式来做到这一点,但只使用 Python 函数就可以了。
所以我想要的是找到"LEVEL1"的第一次出现:(带引号),然后找到"session_transition":的第一次出现,然后在"session_transition":之后找到引号中的任何字符串,然后用另一个替换它细绳。这是我正在使用的字符串:
"BASELINE": {
"audio_volume": 150,
"cry_threshold": 70,
"cry_transition": "LEVEL1",
"expected_volume": 63,
"led_color": "BLUE",
"led_blink_speed": "NONE",
"motor_amplitude": 0.97,
"motor_frequency": 0.5,
"power_transition": "SUSPENDED",
"seconds_to_ignore_cry": 10.0,
"seconds_in_state": -1.0,
"session_transition": "ONLINE",
"track": "RoR",
"timer_transition": null,
"active_session" : 1
},
"LEVEL1": {
"audio_volume": 300,
"cry_threshold": 75,
"expected_volume": 63,
"cry_transition": "LEVEL2",
"led_color": "PURPLE",
"led_blink_speed": "NONE",
"motor_amplitude": 0.76,
"motor_frequency": 1.20,
"power_transition": "SUSPENDED",
"seconds_to_ignore_cry": 10.0,
"seconds_in_state": 480.0,
"session_transition": "ONLINE",
"track": "RoR",
"timer_transition": "BASELINE",
"active_session" : 1
}
}
例如,下面我想在"LEVEL1": 下找到"ONLINE" 并将其替换为"session_transition": 到"OFFLINE",所以它看起来像这样:
"LEVEL1": {
"audio_volume": 300,
"cry_threshold": 75,
"expected_volume": 63,
"cry_transition": "LEVEL2",
"led_color": "PURPLE",
"led_blink_speed": "NONE",
"motor_amplitude": 0.76,
"motor_frequency": 1.20,
"power_transition": "SUSPENDED",
"seconds_to_ignore_cry": 10.0,
"seconds_in_state": 480.0,
"session_transition": "OFFLINE",
"track": "RoR",
"timer_transition": "BASELINE",
"active_session" : 1
}
到目前为止,我有 r"(?<=\"LEVEL1\"\:).* 来匹配第一个匹配项,但不知道如何继续。
【问题讨论】:
-
你为什么要尝试使用正则表达式?解析它并处理字典。
-
@jonrsharpe:如果你的意思是这样,我需要字符串保持字符串而不是字典。
-
为什么?为什么以后不能把它变回字符串?您要解决的实际问题是什么?