我正在尝试剥离所有前导零,但保留字符串中的一个。 例如:
如果字符串为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
我在这里想念什么?
答案 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