gpt4 book ai didi

regex - 匹配 float >= 100

转载 作者:行者123 更新时间:2023-12-01 10:08:09 24 4
gpt4 key购买 nike

我正在逐行读取文件,并希望获取以任何字符而不是 AB 开头的行,并且包含(至少)三位 float 后跟一个百分号 (< strong>即任何大于或等于 100% 的 float %)。

例如:

AA whatevs 102.342% dontcare #MATCH
AB whatevs 102.342% dontcare #MISMATCH
AC whatevs 12.3042% dontcare #MISMATCH *
AD whatevs 102% dontcare #MATCH *
AE whatevs 2002.3042% dontcare #MATCH
AF whatevs 22.3021% dontcare #MISMATCH
AG whatevs 102.342 12.342% dontcare #MISMATCH **

到目前为止,我有以下正则表达式解决方案,由于显而易见的原因,它没有捕获 AD whatevs 102% dontcare

/^(?!AB).*\d{3}\.\d*%/

/^(?!AB).*\d{3}\.?\d*%/ 也不起作用,因为它匹配 AF whatevs 22.3021% dontcare

我知道我可以根据 . 的存在将我的正则表达式分成两个子正则表达式来做到这一点。不过,我想看看是否有单一的正则表达式解决方案。

最佳答案

正如您所注意到的,有许多不同的方法来表示 float 。您可以使用 Regexp::Common::number处理它们而不是滚动你自己的正则表达式:

use strict;
use warnings;

use Regexp::Common qw(number);

while (<DATA>) {
next if /^AB/;

print if /\b$RE{num}{real}{-keep}%/ and $1 >= 100;
}

__DATA__
AA whatevs 102.342% dontcare #MATCH
AB whatevs 102.342% dontcare #MISMATCH
AC whatevs 12.3042% dontcare #MISMATCH *
AD whatevs 102% dontcare #MATCH *
AE whatevs 2002.3042% dontcare #MATCH
AF whatevs 22.3021% dontcare #MISMATCH
AG whatevs 102.342 12.342% dontcare #MISMATCH **
AH whatevs 1.02342E02% dontcare #MATCH
AI whatevs -102% dontcare #MISMATCH

输出:

AA whatevs 102.342% dontcare #MATCH
AD whatevs 102% dontcare #MATCH *
AE whatevs 2002.3042% dontcare #MATCH
AH whatevs 1.02342E02% dontcare #MATCH

我在数据集中添加了一个负数和一个指数来演示使用 Regexp::Common 的便利性。无论您的数据集是否包含此类值,您都不必调整正则表达式。

另请注意,当您将数字视为数字而不是一系列字符时,比较数字会更容易。 -100是一个三位数,但肯定不是>=100

关于regex - 匹配 float >= 100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25370829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com