我具有以下值:
10 000,00
10 000,00
750,00
750,00
1 000 000,00
1 000 000,00
,并且需要以下结果:
10000.00
10000.00
750.00
750.00
1000000.00
1000000.00
我已经分两步做到了;首先,将,
替换为.
,然后通过正则表达式将[^0-9.]
替换为空白。
如何在1个正则表达式替换步骤中实现这一目标?
答案 0 :(得分:0)
我不确定您使用的是哪种语言。
但是在JS中,这可以通过replace方法中提供的回调函数来实现。
let str = `10 000,00
10 000,00
750,00
750,00
1 000 000,00
1 000 000,00`
let op = str.replace(/( +)|(,)/g, function(match,g1,g2){
if(g1 && g1.length){
return ''
} else {
return '.'
}
})
console.log(op)
答案 1 :(得分:0)
我想不出任何在每种情况下都有用的通用方法,但是有一个 正则表达式可以完成您想要的操作:( ?(\d+))?( ?(\d+))?( ?(\d+)),
let string = `10 000,00
10 000,00
750,00
750,00
1 000 000,00
1 000 000,00
1,00
10,00`;
let result = string.replace(/( ?(\d+))?( ?(\d+))?( ?(\d+)),/g, '$2$4$6.');
console.log(result);
解释非常简单(我只解释最后一部分):
( # Capturing group
? # Space (one or zero)
( # Nested capturing group
\d+ # One or more digits
)
)
, # Captures a comma
该模式会重复自身三次,因为示例字符串中的最大值为10 3 。它不会捕获更高阶的值,因为您需要根据需要重复模式( ?(\d+))?
(请注意最后的?
以使模式可选,使您可以保持匹配较小的值)。
对于替换,您只选择内部捕获组,在这种情况下为$2
,$4
和$6
,但是如果模式长大,您将保留前往$8
,$10
及以上。然后,在替换的末尾插入一个点:$2$4$6.
就是这样。