1

我想匹配形式的字符串:

123
.123
1.123

我正在为我的正则表达式使用以下字符串

@"^\\d*(?:\\.\\d+)?$"

但是,它也匹配以下形式的字符串

1.2.3
1..2..3
123...

我的正则表达式有什么问题?我使用^and$因为我不希望字符串包含除了提到的数字形式之外的任何内容。

编辑:

我记录了字符串中匹配的内容78..7,发现匹配位置为 0,长度为 0,结果为 "" 被匹配。有任何想法吗?如果长度为 0,范围位置不应该是 NSNotFound 吗?我想正则表达式很好,我可以检查 !length 但这似乎是不必要的工作。

4

5 回答 5

1

试试这个正则表达式:

^(?<!\.)\d*(\.\d+)?$

我添加了一个否定的后视断言,这意味着在该数字之前不允许使用点。那应该可以解决您的问题。

于 2013-06-12T19:44:32.287 回答
1

描述

此正则表达式将找到带或不带小数点的有效正实数。像123, .123, 1.123. 该表达式可以应用于一个字符串,其中测试的每个值都在它自己的行上,或者在文本块的中间查找数字。它还允许在数字之后直接使用句点和逗号等标点符号,但不会捕获它们。

(?<=^|\s)\d*\.?\d+(?=[,.;]?(?:\s|$))

在此处输入图像描述

给定输入字符串:

1.2.3
1..2..3
128...
1234
.123
1.123
1...23
1.2.3
123...
I like kittens 345.23, and version 2.3.4 dogs

比赛有:

1234
.123
1.123
345.23
于 2013-06-13T01:58:57.030 回答
0

我最好的猜测是 rekire 关于$符号不起作用是正确的。如果是这种情况,那么正则表达式确实匹配字符串开头的空子字符串,这就解释了为什么它说它在位置 0 找到长度为 0 的匹配,而不是 NSNotFound。

于 2013-06-12T21:36:08.840 回答
0

这对你有用吗?

@"^\\d*\\.?\\d+$"

这里没有转义的反斜杠:

^\d*\.?\d+$

于 2013-06-12T21:05:55.633 回答
0

这是 REGEX 匹配您的字符串:

[0-9]*(.){0,1}[0-9]+
于 2015-03-31T06:15:40.863 回答