1

我需要在网页中匹配无限数量的数字。

我需要能够匹配以下所有格式:

100 $
99$
$99
$ 8
$.99
$ .8
$ 99.8
.99$
.99 $
9.2 $
1.2$

以及使用逗号的等价物:

444,333
22,333
1,222
11,111,111
333,333,333,333.01132

或空格:

444 333
22 333
1 222
11 111 111
333 333 333 333.01132

这对我来说真的很难。我习惯使用正则表达式,但我完全没能写出一些防弹的东西。通常http://www.regexlib.com有解决方案,但不是这个。

除了使用正则表达式之外,我想不出其他方法,因为它是纯文本搜索/替换。

4

3 回答 3

6

这是一个正则表达式,它将匹配您提供的所有数字格式:

^(?:\$\s*)?(?:(?:\d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}|\d+)(?:\.\d*)?(?:\s*\$)?$

分解它:

  • ^(?:\$\s*)?将在字符串的开头查找可选的 $,后跟任意数量的空格
  • (?:(?:\d{0,3}(?:[, ]\d{0,3])*[, ])+\d{3}|\d*)将匹配由逗号或空格 ( \d{0,3}(?:[, ]\d{0,3})*[, ])+\d{3}) 分隔的数字组或一串数字 ( \d+) - 因此 123,456,789、123 456 789 和 123456789 将全部匹配。正则表达式不会接受分组不当的数字(所以 123,45,6789 不会匹配)
  • (?:\.\d*)?将匹配一个带有可选小数的数字和后面的任意数量的数字
  • (?:\s*\$)?$将匹配字符串末尾的可选 $,前面有任意数量的空格。
于 2009-06-17T15:31:17.123 回答
5

为什么要写 1 个正则表达式,你可以写几个,然后依次应用它们?

我假设(?)你可以逐行迭代。为什么不试试你的逗号正则表达式,然后是你的空格正则表达式等?如果一个匹配,则不要费心尝试其余的,并存储您的结果并继续下一行。

于 2009-06-17T15:16:15.840 回答
0

如何分两步执行此操作:

首先用''替换所有空格

然后,如果数字格式始终相同,则可以用 '' 替换逗号

在那之后,它很容易,不是吗?

于 2009-06-17T15:17:05.293 回答