正则表达式去除除一个之外的所有前导零

时间:2019-01-13 10:21:21

标签: regex scala

我正在尝试剥离所有前导零,但保留字符串中的一个。 例如:

  

如果字符串为000111,则返回0111
  如果字符串是00111,则返回0111
  如果字符串是0111,则返回0111
  如果字符串为1111,则返回1111

正则表达式运行良好,但是如果我的字符串为“ 3001”,则正则表达式将返回301而不是3001。

scala> "00111".replaceAll("[0]*(0\\d+)", "$1")
res9: String = 0111

scala> "0111".replaceAll("[0]*(0\\d+)", "$1")
res10: String = 0111

scala> "3001".replaceAll("[0]*(0\\d+)", "$1")
res11: String = 301

我在这里想念什么?

2 个答案:

答案 0 :(得分:2)

您缺少行首锚^。并且[0]0相同:

"00111".replaceAll("^0*(0\\d+)", "$1")
> 0111
"3001".replaceAll("^0*(0\\d+)", "$1")
> 3001

答案 1 :(得分:2)

您可以在不使用捕获组的情况下执行此操作,方法是从字符串^0+的开头开始将0匹配1+乘以零,然后替换为0

如果必须在后面跟一个数字,则可以使用^0+(?=\d)

"00111".replaceAll("^0+", "0") // 0111
"0111".replaceAll("^0+", "0") // 0111
"3001".replaceAll("^0+", "0") // 3001