我想将嵌套的括号结构转换为JSON格式的方括号结构。
input_string = '( np ( ap ( !b ( 显微 ) ) !np ( !n ( 解剖学 ) )'
output_string = '[ "np", [ "ap", [ "!b" , "显微" ] ] [ "!np", [ "!n" , "解剖学" ] ] ]'
所以,我需要做三个改变。
替换模式 english_letter(英文字母与“english_letter”,[“english_letter”
例如,ap ( !b
- > "ap", [ "!b"
替换模式 english_letter(中文字母与“english_letter”,“chinese_letter”
例如,!b ( 显微
- > "!b" , "显微"
我无法弄清楚如何解决这个问题,尤其是第二个问题。我已经尝试将字母分为两个列表,即中文和英文,但我不知道如何匹配 english_letter的格式(中文字母
答案 0 :(得分:1)
我假设您的]
的最后一个output_string
是拼写错误,因为此括号与任何左括号都不匹配。这是一次尝试,这是否符合您的要求?它应该至少让你开始。它当然可以优化。
>>> input_string = re.sub('\(', '[', input_string)
>>> input_string
'[ np [ ap [ !b [ 显微 ) ) !np [ !n [ 解剖学 ) )'
>>> input_string = re.sub('\)', ']', input_string)
>>> input_string
'[ np [ ap [ !b [ 显微 ] ] !np [ !n [ 解剖学 ] ]'
>>> input_string = re.sub(r'([a-zA-Z!]+)', r'"\1",', input_string)
>>> input_string
'[ "np", [ "ap", [ "!b", [ 显微 ] ] "!np", [ "!n", [ 解剖学 ] ]'
>>> input_string = re.sub(r'(",\ )\[\ ([^\x00-\x7F]+)',r'\1"\2"' ,input_string)
>>> input_string
'[ "np", [ "ap", [ "!b", "显微" ] ] "!np", [ "!n", "解剖学" ] ]'
答案 1 :(得分:1)
这是另一个使用的选项。
>>> original = '( np ( ap ( !b ( 显微 ) ) !np ( !n ( 解剖学 ) )'
>>> modified = re.sub(r'([^() ]+)', '"\\1",', original)
>>> modified = re.sub(r'(", )\( ("[^\x00-\x7F]+"),', '\\1\\2', modified)
>>> modified = modified.replace('(', '[').replace(')', ']')
输出
[ "np", [ "ap", [ "!b", "显微" ] ] "!np", [ "!n", "解剖学" ] ]