Простая замена Groovy с использованием регулярного выражения

Я читал регулярное выражение, и я думал, что это сработает, но он, похоже, не хочет работать. Все, что мне нужно сделать, это удалить ведущий 1 с номера телефона, если он существует.

Итак:

def mphone = 1+555-555-5555
mphone.replace(/^1/, "")

Должен ли этот вывод + 555-555-5555?

Ответы

Ответ 1

Я распознаю две ошибки в коде. Первая из них, вероятно, опечатка: вы не окружаете номер телефона кавычками, поэтому целое число: 1 + 555 - 555 - 5555 = -5554

Кроме того, вы должны использовать replaceFirst, так как в String нет метода replace, в котором в качестве первого параметра используется шаблон. Это работает:

def mphone = "1+555-555-5555"
mphone.replaceFirst(/^1/, "")

Ответ 2

replace - это Java-метод Java String, который заменяет символ другим:

assert "1+555-551-5551".replace('1', ' ') == " +555-55 -555 "

То, что вы ищете, это replaceAll, который заменит все вхождения регулярного выражения или replaceFirst, который заменит только первое вхождение:

assert "1+555-551-5551".replaceAll(/1/, "") == "+555-55-555"
assert "1+555-551-5551".replaceFirst(/1/, "") == "+555-551-5551"

^ в вашем регулярном выражении означает, что он должен быть в начале:

assert "1+555-551-5551".replaceAll(/^1/, "") == "+555-551-5551"

поэтому код, который вы отправили, был почти правильным.