0

为了正确格式化来自第三方服务的数据,我想知道这个正则表达式是否足够简洁:

(([\d,.]+))(1?\sR\$)

改变这一点:

from 200 R$ to 400 R$ (32 products)

进入这个:

from R$ 200 to R$ 400 (32 products)

要格式化此输出,我使用Preg将文本替换为$3 $1,如http://www.regextester.com/中所示

这是足够好还是正则表达式不够?

4

2 回答 2

2

正则表达式:(\d+[.,]?\d*)(\s*)(R\$)

替代品:$3$2$1


测试输入:

from 200 R$ to 400 R$ (32 products)
from 0,200 R$ to 0.400 R$ (32 products)
from 2,00 R$ to 4.00 R$ (32 products)

测试输出:

from R$ 200 to R$ 400 (32 products)
from R$ 0,200 to R$ 0.400 (32 products)
from R$ 2,00 to R$ 4.00 (32 products)

如果您还想解析不带前导零的十进制数,例如.200,请使用正则表达式

(?=[.,]?\d)(\d*[.,]?\d*)(\s*)(R\$)
于 2012-08-09T12:33:46.317 回答
0
  1. 您绝对可以删除第一组或括号

    并替换为$2 $1

  2. 有什么1?好处?如果在第一组的末尾有一个 1 将与 匹配[\d,.]+,那么它也是多余的

  3. 不要将其\s纳入您的捕获组,然后您将在结果中获得一对多

所以我认为这将是你的正则表达式:

([\d,.]+)\s(R\$)
于 2012-08-09T12:31:04.457 回答