Pythonre.sub公司():在两个不同类别之间替换字符

2024-05-16 23:19:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将嵌套方括号结构转换为JSON格式的方括号结构。在

input_string = '( np ( ap ( !b ( 显微 ) ) !np ( !n ( 解剖学 ) )'    
output_string = '[ "np", [ "ap", [ "!b" , "显微" ] ] [ "!np", [ "!n" , "解剖学" ] ] ]'

所以,我需要做三个改变。在

  1. 将模式英文字母(英文字母替换为英文字母,[“英文字母”
    例如,ap ( !b->;"ap", [ "!b"

  2. 将模式英文字母(中文字母替换为“英文字母”,“中文字母”
    例如,!b ( 显微->;"!b" , "显微"

  3. 将模式)英文字母替换为][“英文字母”

我想不出怎么解决这个问题,尤其是第二个问题。我试过把字母分为两个列表,即中文和英文,但我不知道如何匹配英文字母(中文字母


Tags: gtjson列表inputoutputstring格式np
2条回答

这是另一个可以使用的选项。在

>>> 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(')', ']')

输出

^{pr2}$

我假设您的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", "解剖学" ] ]'

相关问题 更多 >