Совпадение с полной остановкой в ​​предложении с использованием perl - PullRequest
0 голосов
/ 08 декабря 2011

как мне сопоставить точку (точку) в предложении, но я не хочу сопоставлять плавающие числа или слова, содержащие числа?

например.

$sen = "I'm going to match full.stop in sentence 3.142";
if ($sen =~ (s/\.//)) {
    print $1;
}

вывод:

fullstop

В этом примере я хочу сопоставлять только слова или буквенно-цифровые слова, а не цифры.

Ответы [ 4 ]

3 голосов
/ 08 декабря 2011

Используйте осмотр вокруг:

$sen =~ s/(?<!\d)\.(?!\d)//g;

Это будет соответствовать точке, которой не предшествует цифра и за которой не следует цифра.

Обновленная в соответствии с комментарием ОП, это удалит точки, которыесопровождаются заглавными буквами:

#!/usr/bin/perl
use Modern::Perl;
use utf8;

while(<DATA>) {
    chomp;
    s/\.(?=(?:\s*[A-Z])|$)//g;
    # Or, if you want to be unicode compatible
    s/\pP(?=(?:\s*\p{Lu})|$)//g;
    say;
}

__DATA__
I'm going to match full.stop in sentence 3.142
I'm going to match full.Stop in sentence 3.142
I'm going to match full. Stop in sentence 3.142
I'm going to match full.stop in sentence 3.142. End of string.

вывод:

I'm going to match full.stop in sentence 3.142
I'm going to match fullStop in sentence 3.142
I'm going to match full Stop in sentence 3.142
I'm going to match full.stop in sentence 3.142 End of string
0 голосов
/ 26 сентября 2012

Приятно держать рег-версии настолько простыми, насколько это возможно, потому что их уже трудно читать.

Чтобы сопоставить одно или несколько не цифр и пробелов, то '.', затем снова один или несколько не цифр и не пробелов:

$sen = "I'm going to match full.stop in sentence 3.142";
print "$1\n" if $sen =~ /([^\d\s]+\.[^\d\s]+)/';

Дает:

full.stop

0 голосов
/ 08 декабря 2011

Если вы хотите удалить первый период (тот, что находится в середине «full.stop»), но оставить второй (тот, что в 3.142) без изменений, а также оставить его в числах, таких как «1».или «стр.1223» вы можете сделать следующее:

$sen =~ s/(\D)\.(\D)/$1$2/g;
print $sen;
0 голосов
/ 08 декабря 2011

Вы можете использовать /(\.(\D|$))|\D\./. \D означает нецифровый символ, а $ означает конец строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...