使用正则表达式替换简单的Groovy

How*_*wes 32 regex groovy

我一直在阅读正则表达式,我认为这会起作用,但它似乎不想工作.我需要做的就是将电话号码中的前导1删除(如果存在).

所以:

def mphone = 1+555-555-5555
mphone.replace(/^1/, "")
Run Code Online (Sandbox Code Playgroud)

这个输出不应该+ 555-555-5555吗?

Est*_*ban 49

我在你的代码中发现了两个错误.第一个可能是一个错字:你不是用引号包围电话号码所以它是一个整数:1 + 555 - 555 - 5555 = -5554

此外,您应该使用,replaceFirst因为replaceString中没有方法将Pattern作为第一个参数.这有效:

def mphone = "1+555-555-5555"
mphone.replaceFirst(/^1/, "")
Run Code Online (Sandbox Code Playgroud)

  • 好答案.一个警告,不要忘记字符串是不可变的.确保重新分配mphone:`mphone = mphone.replaceFirst(/ ^ 1 /,"")` (20认同)

Ant*_*ine 30

replace 是Java的String方法,它将一个字符替换为另一个字符:

assert "1+555-551-5551".replace('1', ' ') == " +555-55 -555 "
Run Code Online (Sandbox Code Playgroud)

你正在寻找的是replaceAll,它将取代所有出现的正则表达式,或者replaceFirst,它将仅取代第一次出现:

assert "1+555-551-5551".replaceAll(/1/, "") == "+555-55-555"
assert "1+555-551-5551".replaceFirst(/1/, "") == "+555-551-5551"
Run Code Online (Sandbox Code Playgroud)

^您的正则表达式意味着,一个必须开头:

assert "1+555-551-5551".replaceAll(/^1/, "") == "+555-551-5551"
Run Code Online (Sandbox Code Playgroud)

所以你发布的代码几乎是正确的.