我正在尝试匹配以下类型的字符串:
123456
1234.56
123456
1,234.56
0.123456
我想确保这些字符串不匹配:
12,34.56
1.23,456
这是我到目前为止所提出的(在此论坛的上一篇文章的帮助下):
(?<acreage>((\d{1,3}(,\d{3})+)?|\d*)\.\d+|(\d{1,3}(,\d{3})+|\d+)\.?)
这匹配所有有效字符串,但它也匹配无效字符串的部分。
我想要的是在开始时设置某种边界条件,但它不能是^字符,因为在我想要匹配的种植面积之前可能有文字。 \ b字符将逗号视为单词边界,因此对于如下所示的字符串
12,34,567.89
当我真的希望它无法匹配字符串的任何部分时,它将返回34,567.89。
我将在种植面积字符串后检查特定字符,所以我并不担心它会做愚蠢的事情,比如获得123,456&amp; 7从123,4567。
有人可以帮助我让它只匹配有效字符串而不匹配任何无效字符串吗?
答案 0 :(得分:1)
这够了吗?
(?<![\d.,])(?<acreage>((\d{1,3}(,\d{3})+)?|\d*)\.\d+|(\d{1,3}(,\d{3})+|\d+)\.?)(?![\d.,])
我在您的表达中添加了否定lookbehind (?<![\d.,])
和否定lookahead (?![\d.,])
断言。
(?<![\d.,])
确保之前没有数字,.
和,
(?![\d.,])
确保没有数字,.
和,
跟随
这将是您的个人号码边界,检查您的号码周围是否是号码中不允许的字符。