【问题标题】:perl :Extract first line from contentperl : 从内容中提取第一行
【发布时间】:2011-05-04 08:49:03
【问题描述】:

要求:我有很多行的内容。我需要提取第一行并在之后添加新行。

条件:第一行可以. , ? , !结尾,后跟空格,大写字母或任意数字。 . , ? , ! 之后可能已经有新行。在这种情况下,我们需要用单行替换那些额外的新行

例如,如果内容是

案例1

我的名字是abc。我在软件部门工作..... 

案例2

我的名字是abc。
我在软件部门工作...

在这两种情况下,结果都应该像

我的名字是abc。
我在软件部门工作...

解决方案:我尝试过的:

   $$text =~ s/(.+?[\.\?!$])(\n*)(\s[A-Z0-9])/$1\n$3/smi ;

在第二种情况下工作正常。但它不是在第一种情况下添加新行。 请推荐

【问题讨论】:

  • 认为格式可能会毁了你的例子.. ?

标签: regex perl


【解决方案1】:

你为什么把$ 放在你的角色类中? 为什么要使用 $$text ?

你可以试试:

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

my @l = (
"My name is abc. I am working in Software..... ",
"My name is abc.
I am working in Software... 
");

for(@l) {
  s/([.?!])(\n*)\s*/$1\n/smi ;
  say;
}

输出:

我的名字是abc。
我在软件部门工作......
我的名字是 abc。
我在软件部门工作...... 

【讨论】:

    【解决方案2】:
    #!/usr/bin/perl
    use strict; use warnings;
    
    my @strings = (
        "My name is abc.\nI am working in Software...",
        "Is your name xyz?\n \n How do you do?",
        "My car is red!\n Fire engine red!",
        "Mr.\nBrown goes to Washington.",
    );
    
    for my $s ( @strings ) {
        $s =~ s/^( [^.?!]+ [.?!]) \s+ /$1 /x;
        print $s, "\n";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 2011-05-25
      相关资源
      最近更新 更多