使用 python 中的符号拆分字符串



>我有以下字符串:

my_string = '1) ServerName sn = ProtobufUtil.toServerName(request.getServer());\n2) String msg = "Region server " + sn +\n3)  " reported a fatal error:\\n" + errorText;\n4) LOG.error(msg);'

我需要将该字符串转换为按符号\n分割的列表。因此,列表将如下所示:

my_list = ['1) ServerName sn = ProtobufUtil.toServerName(request.getServer());',
           '2) String msg = "Region server " + sn +',
           '3)  " reported a fatal error:\\n" + errorText;',
           '4) LOG.error(msg);'
          ]

我在代码中使用符号 \n 作为拆分器:

my_list = my_string.split("\n")

但是,列表中第三个元素的输出与我预期不符。输出:

my_list = ['1) ServerName sn = ProtobufUtil.toServerName(request.getServer());',
           '2) String msg = "Region server " + sn +',
           '3)  " reported a fatal error:\',
           '" + errorText;',
           '4) LOG.error(msg);']

如何在代码中定义拆分器?

除了正则表达式选项,您别无选择。你可以用re.split和负面的回望来做到这一点。

>>> import re
>>> re.split(r'(?<!\)\n', my_string)

[
    '1) ServerName sn = ProtobufUtil.toServerName(request.getServer())',
    '2) String msg = "Region server " + sn ',
    '3)  " reported a fatal error:\\n" + errorText',
    '4) LOG.error(msg);'
]

后视指定仅当\n前面没有更多反斜杠时,才必须进行拆分。

你可以试试这个模式,这是积极的展望:

pattern r'\n(?=d)'

法典:

my_string = '1) ServerName sn = ProtobufUtil.toServerName(request.getServer());\n2) String msg = "Region server " + sn +\n3)  " reported a fatal error:\\n" + errorText;\n4) LOG.error(msg);'
import re
for i in re.split(r'\n(?=d)',my_string):
    print(i)

输出:

1) ServerName sn = ProtobufUtil.toServerName(request.getServer());
2) String msg = "Region server " + sn +
3)  " reported a fatal error:\n" + errorText;
4) LOG.error(msg);

最新更新