You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl中如何同时按换行符和空格分割字符串?

Perl中split同时按空格和换行分割字符串的问题

你的问题出在正则表达式的写法上:/\s\n/表示匹配一个空白字符紧跟一个换行符的连续组合,而不是匹配任意空白字符(包括空格)或者换行符。所以只有当字符串里出现“空格+换行”的位置才会触发分割,自然没法拆分单独的空格分隔的内容。

修正方案

Perl里的\s本身就包含了换行符(\n)、空格、制表符等所有空白字符,所以只需要匹配任意连续的空白序列就能同时拆分空格和换行:

方法1:使用正则匹配任意连续空白

#!/usr/bin/perl
use warnings;
use strict;

my $str = "aa bb cc\ndd ee ff";
my @arr = split(/\s+/, $str);     # 匹配任意连续空白作为分隔符
print join("\n", @arr);

方法2:利用split的默认行为

split如果第一个参数是空格字符串(' '),会默认按任意空白分割(自动忽略开头的空白,合并连续空白),效果和上面一致:

my @arr = split ' ', $str;

输出结果

aa
bb
cc
dd
ee
ff

补充说明:你对\s包含空格的理解是正确的,但正则里的A B是匹配A紧跟B的连续序列,而不是“A或B”。如果要明确写“空格或换行”,可以用字符类/[ \n]/,但\s已经覆盖了这些场景,用\s+更简洁高效,还能避免连续空白产生空元素。

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:35:29