基于符号的Perl字符串提取
作为一名C开发人员,我对perl语言相当陌生。我的要求是我需要像这样转换值基于符号的Perl字符串提取,perl,Perl,作为一名C开发人员,我对perl语言相当陌生。我的要求是我需要像这样转换值 3-6,9 TO=> "3,4,5,6,9" 如果值为 3-6,9-18 TO "3,4,5,6,9,10,11,12,13,14,15,16,17,18". 如何做到这一点?谢谢。需要拆分两次才能检测到3,9-12和3-6,9 use warnings; use strict; use feature 'say'; foreach my $string (q(3-6,9), q(3-6,9-12), q(
3-6,9 TO=> "3,4,5,6,9"
如果值为
3-6,9-18 TO "3,4,5,6,9,10,11,12,13,14,15,16,17,18".
如何做到这一点?谢谢。需要拆分两次才能检测到
3,9-12
和3-6,9
use warnings;
use strict;
use feature 'say';
foreach my $string (q(3-6,9), q(3-6,9-12), q(3,9-12))
{
my @ranges = split /,/, $string; #/
my @result;
for (@ranges) {
my ($beg, $end) = split /-/;
push @result, ($end ? $beg .. $end : $beg);
}
my $res = join ',', @result;
say $res;
}
印刷品†
其中/
是
†三元运算符中的
$end
测试为“真值”,而unde
和'
(空字符串)和0
(数字零)测试均失败。在这个问题中,$end
被假定为严格的正整数,并隐式使用。但是,undef
是预期的,最好是具体的
push @result, (defined $end ? $beg .. $end : $beg);
请注意,Perl中的“真理”还有几个更有趣的例子。感谢您的评论。需要拆分两次才能检测到
3,9-12
和3-6,9
use warnings;
use strict;
use feature 'say';
foreach my $string (q(3-6,9), q(3-6,9-12), q(3,9-12))
{
my @ranges = split /,/, $string; #/
my @result;
for (@ranges) {
my ($beg, $end) = split /-/;
push @result, ($end ? $beg .. $end : $beg);
}
my $res = join ',', @result;
say $res;
}
印刷品†
其中/
是
†三元运算符中的
$end
测试为“真值”,而unde
和'
(空字符串)和0
(数字零)测试均失败。在这个问题中,$end
被假定为严格的正整数,并隐式使用。但是,undef
是预期的,最好是具体的
push @result, (defined $end ? $beg .. $end : $beg);
请注意,Perl中的“真理”还有几个更有趣的例子。感谢您的评论。扩展范围的一种方法:
use strict;
use warnings;
my @newvals = ();
my @retrns = qw(3-6 9 89-99);
findRanges(@retrns);
sub findRanges
{
my @vals = @_;
@newvals = map { if($_=~m/(\d+)\-(\d+)/) { ($1 .. $2); } else { $_; } } @vals;
}
print join "\n", @newvals;
扩展范围的一种方法:
use strict;
use warnings;
my @newvals = ();
my @retrns = qw(3-6 9 89-99);
findRanges(@retrns);
sub findRanges
{
my @vals = @_;
@newvals = map { if($_=~m/(\d+)\-(\d+)/) { ($1 .. $2); } else { $_; } } @vals;
}
print join "\n", @newvals;
您是否有任何脚本/代码行,以检查您已经证明了什么?您是否尝试了任何东西?由于机密性,我无法显示代码段。我在一家公司工作,不能共享代码。我无法使用reg_exp。最终在SQL(Oracle)中使用它。但这影响了我的周转时间。你有任何脚本/代码行来检查你已经证明了什么吗?你尝试了什么吗?由于机密性,我无法显示这段代码。我在一家公司工作,不能共享代码。我无法使用reg_exp。最终在SQL(Oracle)中使用它。但这影响了我的回程时间。我希望他们能投反对票,我希望人们能解释为什么他们没有明显的理由投反对票|谢谢@zdim工作得很有魅力。由于安全原因,我无法发布我的代码。谢谢您的帮助。@VimalBhaskar出于兴趣,我们都有安全风险,但我们可以简单地用伪代码替换代码中的敏感数据。@VimalBhaskar您有10000行带有敏感数据的代码。。??无论如何,请记住,您不必发布所有的代码,只需发布相关的代码即可作为示例。:)@VimalBhaskar这一切都很好,我只是想在未来的问题上帮助你。我希望他们能投下反对票,我希望人们能解释为什么他们没有明显的理由投下某个东西|谢谢@zdim工作得很有魅力。由于安全原因,我无法发布我的代码。谢谢您的帮助。@VimalBhaskar出于兴趣,我们都有安全风险,但我们可以简单地用伪代码替换代码中的敏感数据。@VimalBhaskar您有10000行带有敏感数据的代码。。??无论如何,请记住,您不必发布所有的代码,只需发布相关的代码即可作为示例。:)@VimalBhaskar一切都很好,我只是想帮助你解决未来的问题。