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

时间:2018-03-19 02:28:52

标签: python string list split element

我有以下字符串:

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);']

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

2 个答案:

答案 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);