为了正确格式化来自第三方服务的数据,我想知道这个正则表达式是否足够简洁:
(([\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/
这还不够好还是正则表达式还不够?
答案 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)
您绝对可以删除第一组或括号
并替换为$2 $1
1?
有什么好处?如果第一组末尾有一个与[\d,.]+
相匹配的1,那么它也是多余的
不要将\s
带入您的捕获组,结果会有一对多
所以我认为这将是你的正则表达式:
([\d,.]+)\s(R\$)