正则表达式匹配任何但超过两个空格

ata*_*tko 0 regex perl

我正在尝试创建两个正则表达式来为字符串中的某些值添加引号.基本上字符串将是这样的:

999            date               Doe, John E.              London            123456789
Run Code Online (Sandbox Code Playgroud)

我想要包围名称,以便如果此文件导出到csv,它将不会分开.这就是我到目前为止所拥有的

$line =~ s/([^\s{2,}]*,[^\s{2,}]*)/"$1"/g;
Run Code Online (Sandbox Code Playgroud)

我认为它应该找到任何逗号及其附近的任何内容,直到它找到两个或更多空格但它不起作用.谢谢您的帮助.

tch*_*ist 8

您要求 2个或更多空格的任何内容.

我同意这unpack是更自然的方式.但是这split是一种以图案形状使用千篇一律的方法.任何不在该模式中的东西都是返回字段.所以这:

@fields = split /\h{2,}/, $line;
$line = join(" " x 2 => map { "($_)" } @fields);
Run Code Online (Sandbox Code Playgroud)

可能就够了.

  • @atatko:很高兴能帮到你.请注意,我使用`\ h`表示*水平空白*.这是Perl 5.10中首次出现的新快捷方式.在那个版本发布之前你必须使用`\ p {HorizSpace}`,这个类型很长,以至于人们通常只使用`\ s`,同时也获得*垂直空白*(这是`\ v`) .即使它没有对特定的例子产生影响,我也喜欢`\ h`,因为它更清楚地说明了我的意思.但是你最好在你的程序顶部放置`use 5.10.0;`来表示你需要最低版本号才能让程序正常工作. (2认同)