匹配空白行与正则表达式

Joh*_*uhy 8 python regex

我有一个字符串,我试图根据空行分成块.

给定一个字符串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"])比较棘手......