2013-06-05 1 views
-1

공백이 있고 허용 된 전화 번호를 사용하는 경우 정규식을 사용하여 형식을 지정하면 비 숫자와 여분의 공백이 제거되지 않으므로 어떻게해야합니까? REGEX로 전화 번호부에

나는이 지금까지이

String num = "  Ken's Phone is + 123 2213 123 (night time)"; 
System.out.println(num.replaceAll("[^\\d|+|\\s]", "").replaceAll("\\s\\s+", " ").replaceAll("\\+ ", "\\+").trim()); 

당신은 동일한 결과를 얻을 수 있도록 단순화시겠습니까? 내가 trim() 첫째, 또는 교체 적어도 전에 모든 여러 공간을 둘 것입니다

num.replaceAll("[^\\d+\\s]", "") // [^\\d|+|\\s] => [^\\d+\\s] 
    .replaceAll("\\s{2,}", " ") // \\s\\s+  => \\s{2,} 
    .replaceAll("\\+\\s", "+")  // \\+   => + 
    .trim() 

답변

1

당신은로 단순화 할 수 있습니다 감사합니다.

\s은 공백을 의미하며 '다음'을 사용한다는 의미 인 경우 [\ t \ n \ x0B \ f \ r]를 의미합니다.

더 좋은 방법

당신은 적어도 두 개의 공백이

replaceAll("\\s{2,}", " ") 
+0

이렇게하면 그룹 간의 공간이 제거됩니다. – Djon

+0

OP 만 ** 추가 공간 **을 모두 제거하지 말고 + "공백 및 + 허용"을 원한다면 코드를 실행 했습니까? – Djon

+0

@Djon : fixed this – mvp

1

는 먼저 다음, 수 -와 - 공간 부분을 추출하여 하나의 공간에 여러 공간을 압축 될 것이다 교체하려는 표현. 그리고 마지막 더하기 기호 뒤의 모든 공백을 제거 :

String numberWithSpaces = str.replaceAll("^[^\\d+]*([+\\d\\s]+)[^\\d]*$", "$1").replaceAll("\\s+", " ").replaceAll("\\+\\s*", "+"); 

는이 코드를 테스트하고 그것을 작동합니다.

+0

이것은 +를 제거합니다. – Djon

+0

@Djon 감사합니다 - 나는 그것을 고치지 않았다 (나는 생각한다) – Bohemian

+0

@Djon은 지금 정말로 고쳐졌다 - 나는 단지 그것을 편집하고 있었다. – Bohemian

관련 문제