我的字符串如下:
'I saw a little hermit crab\r\nHis coloring was oh so drab\r\n\r\nIt\u2019s hard to see the butterfly\r\nBecause he flies across the sky\r\n\r\nHear the honking of the goose\r\nI think he\u2019s angry at the moose\r\n\r\'
我需要在有两个或更多newlines
的地方拆分它。
当然是使用re
模块。
在此特定字符串re.split(r'\r\n\r\n+', text)
上有效,但它不会捕获\r\n\r\n\r\n
,对吧?
我尝试了re.split(r'(\r\n){2,}', text)
,它在每个行和re.split(r'\r\n{2,}', text)
分割,创建了len()
1的列表。
对于没有连续出现超过2 re.split(r'(\r\n){2,}', text) == re.split(r'\r\n\r\n', text)
的字符串,<{1}} True
是否\r\n
?
答案 0 :(得分:2)
当您执行对re.split()
的调用时,您希望使用Non-capturing组而不是捕获组。在documentation中,明确指出使用捕获组会保留分隔符模式:
如果在模式中使用捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回。
re.split(r'(?:\r\n){2,}', text)
答案 1 :(得分:2)
re.split(r'(\r\n){2,}', text)
并非在每一行都分开。它完全符合您的要求,除了之外,它保留了\r\n
的一次出现,因为您已将其包含在捕获组中。请改为使用非捕获组:
(?:\r\n){2,}
在这里您可以看到区别:
>>> re.split(r'(?:\r\n){2,}', 'foo\r\n\r\nbar')
['foo', 'bar']
>>> re.split(r'(\r\n){2,}', 'foo\r\n\r\nbar')
['foo', '\r\n', 'bar']