我最初对此感到困惑:当我注意到这一点时,我正在研究 Perl 中的字符分割功能:
DB<56> map(print("-", $_, "\n"), split( //, "test") );
-t
-e
-s
-t
DB<57> map(print("-", $_, "\n"), split( /./, "test") );
DB<58> map(print("-", $_, "\n"), split( /(.)/, "test") );
-
-t
-
-e
-
-s
-
-t
我已经知道,如果使用空的正则表达式 // ,字符串会被分割成单独的字符;但我不清楚/(.)/
正则表达式中的那些空字符串是从哪里来的——但仅仅几句话之后,页面就会指出“如果正则表达式有分组,那么生成的列表也包含来自分组的匹配子字符串.. . 由于 $x 的第一个字符与正则表达式匹配,因此 split 在列表中添加了一个空的初始元素。 “所以,这是预期的行为。(althgouh,我仍然不清楚为什么未分组的点/./
不做任何事情)
但是,我也在 Python 中工作,遇到了类似的问题(拆分结果中的空字符串)-在那里我找到了一个filter(None, list)
函数,在这个调用中,它只是从列表中删除空字符串。在 Perl 中使用什么来实现相同的功能?