perl: извлечь первую строку из содержимого - PullRequest
1 голос
/ 03 ноября 2010

Требование: у меня много контента.Мне нужно извлечь первую строку и добавить новую строку после этого.

Условие: первая строка может заканчиваться . , ? , !, а затем пробел с заглавной буквой или любым числом.После . , ? , ! может быть уже новая строка.В этом случае нам нужно заменить эти дополнительные новые строки одной строкой

Например, если содержимое

Case1

My name is abc. I am working in Software..... 

или

Case2

My name is abc.
I am working in Software...

В обоих случаях результат должен выглядеть следующим образом:

My name is abc.
I am working in Software...

Решение: что я пробовал:

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

Работает нормально со вторым случаем.Но это не добавление новой строки в первом случае.Пожалуйста, предложите

Ответы [ 2 ]

3 голосов
/ 03 ноября 2010

Почему вы помещаете $ в свой класс персонажей?И зачем использовать текст $$?

Вы можете попробовать:

#!/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;
}

Вывод:

My name is abc.
I am working in Software..... 
My name is abc.
I am working in Software... 
1 голос
/ 03 ноября 2010
#!/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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...