我有一个字符串,我试图根据空行分成块.
给定一个字符串s
,我以为我可以这样做:
re.split('(?m)^\s*$', s)
Run Code Online (Sandbox Code Playgroud)
这在某些情况下有效:
>>> s = 'foo\nbar\n \nbaz'
>>> re.split('(?m)^\s*$', s)
['foo\nbar\n', '\nbaz']
Run Code Online (Sandbox Code Playgroud)
但是如果该行完全为空则它不起作用:
>>> s = 'foo\nbar\n\nbaz'
>>> re.split('(?m)^\s*$', s)
['foo\nbar\n\nbaz']
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
[python 2.5; 没有什么区别,如果我编译'^\s*$'
使用re.MULTILINE
,使用编译表达式.]
Gle*_*ard 17
试试这个:
re.split('\n\s*\n', s)
Run Code Online (Sandbox Code Playgroud)
问题是"$*^"实际上只匹配"单独在一行上的空格(如果有的话)" - 而不是新行本身.当线上没有任何东西时,这会使分隔符变空,这没有意义.
这个版本也摆脱了分界换行本身,这可能就是你想要的.否则,您将在每个拆分部分的开头和结尾处粘贴换行符.
将多个连续的空行视为定义空块("abc \n \n \ndef" - > ["abc","","def"])比较棘手......