正则表达式分裂换行符的连续性

时间:2010-04-08 00:20:56

标签: python regex python-3.x

我正在尝试在换行符上拆分字符串(适用于Windows,OS X和Unix文本文件的换行符)。如果这些中有任何连续性,我也想分开,而不是在结果中包含任何

因此,在拆分以下内容时:

"Foo\r\n\r\nDouble Windows\r\rDouble OS X\n\nDouble Unix\r\nWindows\rOS X\nUnix"

结果将是:

['Foo', 'Double Windows', 'Double OS X', 'Double Unix', 'Windows', 'OS X', 'Unix']

我应该使用什么正则表达式?

5 个答案:

答案 0 :(得分:21)

如果行的开头或结尾没有空格,则可以使用不带参数的line.split()。它将删除双打。 。 如果没有,您可以使用[a for a a.split("\r\n") if a]

编辑:str类型也有一个名为“splitlines”的方法。

"Foo\r\n\r\nDouble Windows\r\rDouble OS X\n\nDouble Unix\r\nWindows\rOS X\nUnix".splitlines()

答案 1 :(得分:7)

用于此目的的最简单模式是r'[\r\n]+',您可以将其称为“一个或多个回车符或换行符”。

答案 2 :(得分:4)

re.split(r'[\n\r]+', line)

答案 3 :(得分:1)

>>> s="Foo\r\n\r\nDouble Windows\r\rDouble OS X\n\nDouble Unix\r\nWindows\rOS X\nUnix"
>>> import re
>>> re.split("[\r\n]+",s)
['Foo', 'Double Windows', 'Double OS X', 'Double Unix', 'Windows', 'OS X', 'Unix']

答案 4 :(得分:0)

注意模式的贪婪规则:

pattern = re.compile(r'(\r\n){2,}|(\n\r){2,}|(\r){2,}|(\n){2,}')
paragraphs = pattern.split(text)