perl中的完美匹配
我有一个关于完美匹配的问题。我想从一个文件中得到正整数和负整数的总和。我还想得到文件中具有相同值的日期 我的档案:perl中的完美匹配,perl,Perl,我有一个关于完美匹配的问题。我想从一个文件中得到正整数和负整数的总和。我还想得到文件中具有相同值的日期 我的档案: Hello -12, 3.4 and 32. Where did you go on 01/01/2013 ? On 01/01/2013, we went home. -4 plus 5 makes 1. 03/02/2013 解决方案: -16 //the sum of negative integers. 38 //the sum of positive i
Hello -12, 3.4 and 32. Where did you
go on 01/01/2013 ? On 01/01/2013, we
went home. -4 plus 5 makes 1.
03/02/2013
解决方案:
-16 //the sum of negative integers.
38 //the sum of positive integers.
2 //count of dates have same values.
我的代码:
$sum=0;
$sum1=0;
while ($_=<>) {
for each($_=~ /_\d+g){
$sum+=$_;
}
for each($_=~ /_\d+(\.| )/g){
$sum1+=$_;
}
foreach($_=~ / \d{2}(/\d{2}({/\d{4})?)?/ {
$count++;
}
}
print "$sum\n";
print "$sum1\n";
print "$count\n";
}
$sum=0;
$sum1=0;
while($\=){
对于每个($\uD=~/\uD+g){
$sum+=$\ux;
}
对于每个($\=~/\ud+(\.\124;)/g){
$sum1+=$\u1;
}
foreach($\u=~/\ d{2}(/\d{2}({/\d{4}))?/{
$count++;
}
}
打印“$sum\n”;
打印“$sum1\n”;
打印“$count\n”;
}
我的代码错误。请帮助。我无法打印上面的结果。您的代码非常糟糕。它包含许多语法错误,您应该在每个脚本中包含和 也就是说,我可以通过演示如何解析文件并同时提取各种正则表达式来帮助您:
use strict;
use warnings;
while (<DATA>) {
print "Processing: $_";
while (m{(\d{2}/\d{2}/\d{4})|(-\d+)|(\d+\.?\d*)}g) {
my ($date, $neg, $pos) = ($1, $2, $3);
if (defined $date) {
print " Found Date: $date\n";
} elsif (defined $neg) {
print " Found Neg: $neg\n";
} elsif (defined $pos) {
print " Found Pos: $pos\n";
}
}
}
__DATA__
Hello -12, 3.4 and 32. Where did you
go on 01/01/2013 ? On 01/01/2013, we
went home. -4 plus 5 makes 1.
03/02/2013
您必须始终将
use strict
和use warnings
添加到您编写的每个Perl程序的顶部,并使用my
声明您的所有变量,尽可能接近它们的第一个使用点。这尤其适用于您请求他人帮助修复它的情况,这是一种良好的方式。如果你可以添加一些缩进和空格,这样你的代码至少是可读的。在这种情况下,你发布了一个甚至没有编译的Perl程序。这是没有理由的。请先修复它,然后再请其他人花宝贵的时间帮助你。考虑到-12
和-12.4
失败ode>4。是的,我故意将我的正则表达式建议限制在他的测试数据中的数字上,因为我只是演示了一次处理多个正则表达式的总体技术,而不是猜测他的解析意图。老实说,帮助一个如此糟糕的人感觉有点侮辱这是他们的第一个问题,但这段代码应该能让他找到90%的解决方案,并有望在未来的问题中找到更好的代码。
Processing: Hello -12, 3.4 and 32. Where did you
Found Neg: -12
Found Pos: 3.4
Found Pos: 32.
Processing: go on 01/01/2013 ? On 01/01/2013, we
Found Date: 01/01/2013
Found Date: 01/01/2013
Processing: went home. -4 plus 5 makes 1.
Found Neg: -4
Found Pos: 5
Found Pos: 1.
Processing: 03/02/2013
Found Date: 03/02/2013