1

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

123456

1234.56

123,456

1,234.56

.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。

我将在 acreage 字符串之后检查特定字符,所以我不太担心它会做一些愚蠢的事情,比如从 123,4567 得到 123,456 和 7。

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

4

1 回答 1

1

这够了吗?

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

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

(?<![\d.,])确保没有数字,no.和 no ,before

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

在 Regexr 上查看

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

于 2012-08-09T21:27:07.370 回答