Python“拆分”在空的新行上

时间:2016-08-09 13:52:10

标签: python

尝试在“空”换行符上使用python拆分而不是任何其他新行。我尝试了一些我发现的其他例子,但似乎都没有。

数据示例:

(*,224.0.0.0/4) RPF nbr: 96.34.35.36 Flags: C RPF P
  Up: 1w6d

(*,224.0.0.0/24) Flags: D P
  Up: 1w6d

(*,224.0.1.39) Flags: S P
  Up: 1w6d

(96.34.246.55,224.0.1.39) RPF nbr: 96.34.35.36 Flags: RPF
  Up: 1w5d
  Incoming Interface List
    Bundle-Ether434 Flags: F A, Up: 1w5d
  Outgoing Interface List
    BVI100 Flags: F, Up: 1w5d
    TenGigE0/0/0/3 Flags: F, Up: 1w5d
    TenGigE0/0/1/1 Flags: F, Up: 1w5d
    TenGigE0/0/1/2 Flags: F, Up: 1w5d
    TenGigE0/0/1/3 Flags: F, Up: 1w5d
    TenGigE0/1/1/1 Flags: F, Up: 1w5d
    TenGigE0/1/1/2 Flags: F, Up: 1w5d
    TenGigE0/2/1/0 Flags: F, Up: 1w5d
    TenGigE0/2/1/1 Flags: F, Up: 1w5d
    TenGigE0/2/1/2 Flags: F, Up: 1w5d
    Bundle-Ether234 (0/3/CPU0) Flags: F, Up: 3d16h
    Bundle-Ether434 Flags: F A, Up: 1w5d

我希望拆分任何在线新线,只换新线。

示例代码如下:

myarray = []
myarray = output.split("\n")
for line in myarray:
    print line
    print "Next Line"

我确实已导入“re”库。

3 个答案:

答案 0 :(得分:5)

当你考虑空行时,这很容易。它只是换行符,因此在空行上拆分将按顺序拆分两个换行符(一个来自前一行非空行,一行是'整行'空行。 / p>

myarray = output.split("\n\n")
for line in myarray:
    print line
    print "Next Line"

答案 1 :(得分:1)

空行只是两个新行。因此,您最简单的解决方案可能是检查两个新行(除非您预计会出现连续两行以上的空行)。

import os
myarray = [] #As DeepSpace notes, this is not necessary as split will return a list. No impact to later code, just more typing
myarray = output.split(os.linesep + os.linesep) ##use os.linesep to make this compatible on more systems

那就是我开始的地方

答案 2 :(得分:0)

在多个空白行应被视为一个空白行的情况下有效。

import re

def split_on_empty_lines(s):

    # greedily match 2 or more new-lines
    blank_line_regex = r"(?:\r?\n){2,}"

    return re.split(blank_line_regex, s.strip())

正则表达式有点奇怪。

  1. 首先,贪婪匹配意味着许多空行都算作一个 单次匹配,即6条空行进行了一次拆分,而不是三项拆分。
  2. 第二,该模式不仅匹配\n,而且匹配\r\n(对于 Windows)或\n(对于Linux / Mac)。
  3. 第三,该组(用括号表示)必须在{br1 开头的括号使它成为“非捕获”组,从而改变了 ?:的行为。

例如:

re.split

返回

s = """

hello
world

this is







a test

"""

split_on_empty_lines(s)