2012-03-20 18 views
16

Czytałem przez regex i myślałem, że to zadziała, ale wydaje się, że nie chce działać. Wszystko, co muszę zrobić, to usunąć wiodącą 1 z numeru telefonu, jeśli istnieje.Proste Groovy zamień za pomocą regex

Więc:

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

Gdyby nie to wyjście + 555-555-5555?

+0

Miałeś na myśli 'def mphone =" 1 + 555-555-5555 "' (z cytatami) – Antoine

Odpowiedz

26

Rozpoznawanie dwóch błędów w kodzie. Pierwszy z nich to prawdopodobnie literówka: nie otaczają numer telefonu w cudzysłowie dlatego liczbą całkowitą: 1 + 555 - 555 - 5555 = -5554

Ponadto, należy użyć replaceFirst ponieważ nie ma sposobu replace w String biorąc a Pattern jako pierwszy parametr. To działa:

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

Dobra odpowiedź. Jedno zastrzeżenie, nie zapomnij Ciągi są niezmienne. Pamiętaj o ponownym przypisaniu mphone: 'mphone = mphone.replaceFirst (/^1 /," ")' –

+0

@Johnathon świetny komentarz, używając ostatniej linii jako wartości zwrotnej, ale nie sądziłem, że może to być również błędne * w miejscu * wymiana – Esteban

+0

Wykonano @ChrLipp, dziękuję za poinformowanie mnie! – Esteban

17

replace jest metoda Java Java String, który zastąpić znak inny:

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

Co szukasz jest replaceAll, które mogłyby zastąpić wszystkie wystąpienia regex, lub replaceFirst, że zastąpi tylko pierwsze wystąpienie:

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

^ w regex oznacza t kapelusz musi być na początku:

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

więc kod, który wysłałeś był prawie poprawny.