【问题标题】:Perl Split String that has double quotes and space具有双引号和空格的 Perl 拆分字符串
【发布时间】:2015-05-16 10:52:44
【问题描述】:

我有一个这样的字符串:"abc" "cd - e"。我需要将其拆分为以下两个字符串:

  1. "abc"
  2. "cd - e"

我在 Perl 中尝试了几个选项,但无法满足我的需要。有人可以指导我吗?谢谢。

【问题讨论】:

标签: regex string perl parsing


【解决方案1】:
my @strings = $input =~ /"[^"]*"/g;
  • 假设输入有效。基本上,您可以使用正则表达式匹配来验证或提取,但同时进行这两项操作非常困难。
  • 假设引用的字段不能包含引号,因为您没有提到转义机制。

【讨论】:

    【解决方案2】:

    您可以在前面有 " 后跟 " 的空格上进行拆分:

    use strict;
    use warnings; 
    
    my $s = '"abc" "cd - e"';
    my @matches = split /(?<=")\s+(?=")/, $s;
    # "abc"
    # "cd - e"
    

    【讨论】:

      【解决方案3】:

      如果您的输入将特别包含您建议的两个字符串(而不是任意 n 字符串),那么这应该可以:

      $s = '"abc" "cd - e"';
      
      $s =~ /(".*") (".*")/;
      $s1 = $1;
      $s2 = $2;
      

      或者您可以通过将. 替换为“非引号”来使其更安全,即[^"]

      $s =~ /("[^"]*") ("[^"]*")/;
      $s1 = $1;
      $s2 = $2;
      

      【讨论】:

        猜你喜欢
        • 2015-08-25
        • 1970-01-01
        • 1970-01-01
        • 2017-02-19
        • 1970-01-01
        • 2018-10-26
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        相关资源
        最近更新 更多