我尝试使用正则表达式来确定字符串是否包含小于500英尺的值。重要的是,匹配存在一些关键限制和假设:
-
可以假定逗号已被剥离。小数保证为
.
而不是
,
-
不能假定数值前面有空格。
-
可以假设“英尺”将写为“英尺”或“英尺”
-
可以采用小写
-
小数可以是任意长度
-
数字和单词“feet”或“ft”之间可能有任意数量的空格。
迄今为止我的尝试:
尝试1
\b[1-4]{0,1}[0-9]{1,2}(\.[0-9]{1,}}){0,1} {0,}(ft|feet)\b
这很好,但无法解释小数点,无法匹配1000.5英尺(匹配“5英尺”)这样的值。
尝试2
我的下一个尝试是包括一个负面的回顾,以确保比赛之前没有
.
或者任何号码。
(?<!(\.|[0-9]))([1-4]{0,1}[0-9]{1,2}(\.[0-9]{1,}}){0,1} {0,}(ft|feet))\b
不幸的是,现在这不匹配任何小数(例如,5.5英尺应该匹配,但不匹配)。我怀疑我误解了“负面观察”是如何起作用的。
如果你能理解我的错误,我将不胜感激!
测试用例:
-
“1英尺高”-匹配
-
“1英尺高”-匹配
-
“1.1英尺高”-匹配
-
“他6英尺高”-匹配
-
“499.555英尺高”-匹配
-
“他高2米”-不匹配
-
“500英尺高”-不匹配
-
“这栋楼高1000.405英尺”-不匹配