我有以下字符串:
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);']
如何在代码中定义拆分器?
答案 0 :(得分:3)
你没有选择,只有正则表达式选项。您可以使用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);'
]
lookbehind指定只有在\\n
之前没有更多反斜杠时才能进行拆分。
答案 1 :(得分:1)
你可以尝试这种模式,这是积极的前瞻:
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);