由于某些原因,我从一开始就在Perl语言中使用regExp,我在这里编写了一个快速脚本来计算输入的一些文本中不起作用的句子。我只是在最后拿回了数字1,我知道在指定的文件中有几个,所以计数应该更高。我看不出有什么问题...
#!C:\strawberry\perl\bin\perl.exe
#strict
#diagnostics
#warnings
$count = 0;
$file = "c:/programs/lorem.txt";
open(IN, "<$file") || die "Sorry, the file failed to open: $!";
while($line = <IN>)
{
if($line =~ m/^[A-Z]/)
{
$count++;
}
}
close(IN);
print("Sentances count was: ($count)");文件lorem.txt在这里......
Lorem ipsum dolor坐好了,敬请光临。埃尼安commodo舌叶获得多洛尔。埃尼安·马萨。同时社会是自然的,不是分娩的,而是母体。1.我不会让你失望的,我不会让你失望。在马萨基尼姆的空洞结果。Donec pede justo,fringilla vel,aliquet nec,vulputate eget,arcu.就是这样,就这样。[译] Nullam dictum eu pede mollis pretium.整型tinciduntCras dapibus。元素万岁。埃涅斯的小尾寒羊。埃尼安·利奥·里乌拉,端口欧盟,因此,埃里弗德·阿克,埃尼姆。我的心,你的心,我的心。菜豆是一种新的植物。Quisque rutrum埃尼人的饮食习惯。Etiam ultricies nisi augu.这是一种很好的方法。。艾蒂安·朗库斯。天哪,告诉我们什么是条件,什么是自由,坐什么是什么。南瓜nunc,白兰地,卢特斯枕头,hendrerit id,lorem。请记住,我们的工作很重要。我不想吃毒药。Nullam quis ante.我坐在这里,也不知道我的性爱。酒后驾车的利奥。流苏毛发坐在我的头上。[医]大矢状肌。最后,我要说的是,我的朋友们,
发布于 2011-04-15 01:48:00
我不知道你的lorem.txt里有什么,但是你给出的代码没有计算句子。它在计算行数,而且还计算以大写字母开头的行数。
此正则表达式:
/^[A-Z]/仅在行的开头匹配,并且该行的第一个字符必须大写。所以如果你有一行看起来像it. And then we went...,它将不会被匹配。
如果希望匹配所有大写字母,只需从正则表达式的开头删除^即可。
发布于 2011-04-15 01:52:33
这并没有回答您关于regexp的特定问题,但是您可以考虑使用CPAN模块:Text::Sentence。你可以看看它的源代码,看看它是如何定义一个句子的。
use warnings;
use strict;
use Data::Dumper;
use Text::Sentence qw(split_sentences);
my $text = <<EOF;
One sentence. Here is another.
And yet another.
EOF
my @sentences = split_sentences($text);
print Dumper(\@sentences);
__END__
$VAR1 = [
'One sentence.',
'Here is another.',
'And yet another.'
];谷歌搜索结果也出现了:Lingua::EN::Sentence
https://stackoverflow.com/questions/5667287
复制相似问题