【问题标题】:Perl: Parsing * delimited file [closed]Perl:解析 * 分隔文件 [关闭]
【发布时间】:2013-06-03 10:52:52
【问题描述】:

我有一个输入文本文件 input.txt 如图所示

a,2,3*b,4,5*c,7,3*

我必须按如下方式打印数字

a,2,3
b,4,5
c,7,3

【问题讨论】:

  • 你有没有尝试过?
  • 正则表达式解决方案是 ../[^*]/
  • perl -l -0052 -pe0 试试-MO=Deparse 看看它是如何工作的。

标签: regex perl split


【解决方案1】:

为什么您认为正则表达式会有所帮助?做起来容易得多

tr '*' '\n' <input.txt

如果您需要 Perl 解决方案,

perl -pe 'y/*/\n/' input.txt

【讨论】:

    【解决方案2】:

    您可以使用以下正则表达式

    /[^*]/
    

    【讨论】:

      【解决方案3】:

      您的输入有由* 分隔的记录?我们可以将输入记录分隔符 $/ 设置为那个值!

      local $/ = "*";
      while (<>) {
        chomp;
        print $_, "\n";
      }
      

      单行示例:

      $ printf 'a,2,3*b,4,5*c,7,3*' | perl -lpe'BEGIN{$/="*"}'
      a,2,3
      b,4,5
      c,7,3
      

      (-lauto-chomps 输入,并将输出分隔符附加到输出。-p 循环输入的所有记录,执行代码,并打印$_ 的值。我们不要自己处理这些行,只需将记录分隔符从* 更改为\n。)

      只要原始数据不包含换行符就可以正常工作:这些是未经修改的。 s/\n//g 替换将在很大程度上解决这个问题。

      【讨论】:

      • 或作为 obfu^D^D^D^D 优化版本:perl -l -0052 -pe0 通过将-l 开关放在-0 开关之前$\ 未设置为*好吧。
      【解决方案4】:

      您可以为此使用拆分:

       my $string = "a,2,3*b,4,5*c,7,3*";
      
       my @substr = split(/\*/, $string);
      
      {
        local $, = "\n";
        print @substr;
      }
      

      输出:

      a,2,3
      b,4,5
      c,7,3
      

      【讨论】:

        【解决方案5】:

        你也可以试试这个:

         my $data = "a,2,3*b,4,5*c,7,3*";
         my $data2 = substr($data, 0, LengthOfSampleInputStringHere - 1);
         my @values = split('*',$data2);
        
         # Print and verify (Optional)
         foreach my $val (@values) 
         {
            print "${val}\n";
         }
        

        编辑

        你也可以使用这个正则表达式:

        /([^\*]+)/
        

        【讨论】:

          【解决方案6】:

          $string =~ s/\*/\n/g; 应该为你做所有内联替换

          【讨论】:

            猜你喜欢
            • 2013-10-16
            • 2015-07-04
            • 2016-12-27
            • 1970-01-01
            • 2016-11-23
            • 1970-01-01
            • 2013-10-12
            • 2016-05-25
            • 1970-01-01
            相关资源
            最近更新 更多