【发布时间】:2014-10-11 19:27:16
【问题描述】:
我正在逐行读取文件,并希望得到以任何而不是 AB 开头的行,并且 包含(至少)三位浮点数,后跟百分号(即任何大于或等于 100% 的浮点数%)。
例如:
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。
我知道我可以通过基于. 的存在将我的正则表达式分成两个子正则表达式来做到这一点。不过,我想看看是否有单一的正则表达式解决方案。
【问题讨论】:
-
试试这个
/^(?!AB).*\d{3}(\.\d+)?%/(未测试)
标签: regex perl floating-point pattern-matching string-matching