除非在单个带引号的字符串中,否则如何按空格分割字符串?

Jes*_*lam 5 regex perl split

我正在寻找一种解决方案来拆分包含以下格式的文本的字符串:

"abcd efgh 'ijklm no pqrs' tuv"
Run Code Online (Sandbox Code Playgroud)

这将产生以下结果:

['abcd', 'efgh', 'ijklm no pqrs', 'tuv']
Run Code Online (Sandbox Code Playgroud)

换句话说,除非在单个带引号的字符串中,否则它将按空格分割.我认为可以使用.NET regexps使用"Lookaround"运算符,特别是平衡运算符.我不太了解Perl.

Sin*_*nür 15

使用Text :: ParseWords:

#!/usr/bin/perl

use strict; use warnings;
use Text::ParseWords;

my @words = parse_line('\s+', 0, "abcd efgh 'ijklm no pqrs' tuv");

use Data::Dumper;
print Dumper \@words;
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Temp> ff
$VAR1 = [
          'abcd',
          'efgh',
          'ijklm no pqrs',
          'tuv'
        ];

您可以查看源代码Text::ParseWords::parse_line以查看使用的模式.

  • @Jergason将这归咎于那些精彩的人,当他们*没有找到他们需要的东西时,他们必须自己编写,然后CPAN结果.:) (5认同)