>我有以下字符串:
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);