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

在python中使用符号拆分字符串,python,string,list,split,element,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 = [

我有以下字符串:

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")
但是,列表中第三个元素的输出与我预期的不一样。 输出:


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

除了regex选项之外,您没有其他选项。您可以使用
re.split
和反向查找来完成此操作

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

lookback指定只有当
\\n
前面没有更多反斜杠时,才能进行拆分。

除了regex选项之外,没有其他选项。您可以使用
re.split
和反向查找来完成此操作

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

lookbehind指定只有在
\\n
前面没有更多反斜杠时才能进行拆分。

您可以尝试此模式,它是正向的lookbehind:

pattern r'\\n(?=\d)'
代码:

输出:

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

您可以尝试这种模式,这是积极的前瞻:

pattern r'\\n(?=\d)'
代码:

输出:

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

请解释为什么输出不是您期望的。对我来说,这似乎是意料之中的事。试着自己想出一些方法。列表中的第三个元素应该是一个元素
'3)“报告了致命错误:\\\\n“+errorText;”,但它被分成两个元素。是的,但为什么?该输出完全是预期的…因为在第三个元素中,
致命错误之后的symbol
\\n
是第3行代码的一部分。请解释为什么输出不是预期的。对我来说,这似乎是意料之中的事。试着自己想出一些方法。列表中的第三个元素应该是一个元素
'3)“报告了致命错误:\\\\n“+errorText;”,但它被分成两个元素。是的,但为什么?该输出完全是预期的…因为在第三个元素中,
致命错误之后的符号
\\n
是第3行代码的一部分。从技术上讲,您应该查找任意奇数乘以两个反斜杠。从技术上讲,您应该查找任意奇数乘以两个反斜杠。