正则表达式自定义单词边界.Net

时间:2012-08-09 19:30:05

标签: .net regex

我正在尝试匹配以下类型的字符串:

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。

有人可以帮助我让它只匹配有效字符串而不匹配任何无效字符串吗?

1 个答案:

答案 0 :(得分:1)

这够了吗?

(?<![\d.,])(?<acreage>((\d{1,3}(,\d{3})+)?|\d*)\.\d+|(\d{1,3}(,\d{3})+|\d+)\.?)(?![\d.,])

我在您的表达中添加了否定lookbehind (?<![\d.,])和否定lookahead (?![\d.,])断言。

(?<![\d.,])确保之前没有数字,.,

(?![\d.,])确保没有数字,.,跟随

here on Regexr

这将是您的个人号码边界,检查您的号码周围是否是号码中不允许的字符。