在大文件中,我有SIgnal_Catch[0]
形式的行,其中大括号中的数字范围为0到223345.我想提取数字介于2239和13569之间的行。
我试过了:
print "$line" if $line =~ /SIgnal_Catch\[2239-13569]/;
但它与我想要的线不匹配。我也试过这个:
print "$line" if $line =~ /SIgnal_Catch\[\d+]/;
但它太匹配了。我怎样才能做到这一点? 对于这个特定的问题,我不能使用$ 1作为范围。
答案 0 :(得分:2)
不要试图让正则表达式模式做得太多。您正在编写Perl程序,因此请使用Perl
这将按照您的要求进行
if ( /SIgnal_Catch\[(\d+)\]/ and $1 >= 2239 and $1 <= 13569 ) {
...
}
答案 1 :(得分:1)
由于您已经说过无法使用$1
或$&
,因此这是我制作的正则表达式字符串。它有效,但它并不漂亮:
$line =~ /SIgnal_Catch\[\b(2239|22[456789]\d|2[3-9]\d{2}|[3-9]\d{3}|(10|11|12)\d{3}|13[0-4]\d{2}|135[0-6]\d)\b\]/;
就像我在评论中所说,你基本上必须考虑如何用字符串表示数字,并格式化所有替代方案。我在regex101上测试了这个字符串并且它有效。但是,如果将来再次出现这种正则表达式的可能性很小,那么值得考虑的是你是否可以修改工具(cfr Borodon的回复,或者我对原始问题的评论),而不仅仅是添加更多像这样的正则表达式。
注意:如果您在regex101网站上进行测试,并且在“测试字符串”框中有多个数字,请不要忘记将全局修饰符g
添加到正则表达式,否则只会找到第一个。
答案 2 :(得分:0)
if ( $line =~ /.*SIgnal_Catch\[([1-9][0-9]{3,4})\].*/ ) {
if ( $1 >= 2239 && $1 <= 13569 ) {
print $line . "\n";
}
}
用 正则表达式做你想做的事,嗯,真的很毛茸茸。尝试类似上面的内容。
答案 3 :(得分:-1)
正如AntonH所提到的,您可以使用以下内容:
shouldComponentUpdate
上面的正则表达式无效,您的匹配缺少&#34; [&#34;和&#34;]&#34;。
希望这有帮助。