正则表达式替换以删除空格并将逗号更改为句点

时间:2019-02-07 14:48:32

标签: regex

我具有以下值:

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个正则表达式替换步骤中实现这一目标?

2 个答案:

答案 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.就是这样。