如何使用正则表达式更改货币位置

时间:2012-08-09 12:01:42

标签: regex preg-replace currency-formatting

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

(([\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/

中所示

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

2 个答案:

答案 0 :(得分: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\$)

答案 1 :(得分:0)

  1. 您绝对可以删除第一组或括号

    并替换为$2 $1

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

  3. 不要将\s带入您的捕获组,结果会有一对多

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

    ([\d,.]+)\s(R\$)