2012-01-03 2 views
1

Я следующий пример строки, которая должна быть отфильтрованаJava регулярное выражение для фильтрации телефонных номеров

0173556677 (Alice), 017545454 (Bob) 

Это как телефонные номера добавляются в текстовом виде. Я хочу, чтобы текст выглядел так:

0173556677;017545454 

Есть ли способ изменить текст, используя регулярное выражение. Как бы выглядело такое выражение? Или вы рекомендуете другой метод?

+1

Посмотрите на libphonenumber Google – fge

ответ

4

можно сделать следующим образом:

String orig = "0173556677 (Alice), 017545454 (Bob)"; 
String regex = " \\(.+?\\)"; 
String res = orig.replaceAll(regex, "").replaceAll(",", ";"); 
//       ^remove all content in parenthesis 
//            ^replace comma with semicolon 
+0

В переменной 'regex' есть'? '. Я попытался выполнить код без '?', Переменная 'res' получает' 0173556677', а не '0173556677; 017545454'. '?' в смысле regex означает необязательный символ. Что именно это означает? – stackoverflowery

1

Используйте выражение в android.util.Patterns

доступа к статической переменной

Patterns.PHONE

или использовать это выражение here (Android исходный код)

0

Это решение работает с телефонными номерами, разделенными с любой строкой, которая не содержит номера:

String orig = "0173556677 (Alice), 017545454 (Bob)";  
String[] numbers = orig.split("\\D+"); //split at everything that is not a digit 
StringBuilder sb = new StringBuilder(); 
if (numbers.length > 0) { 
    sb.append(numbers[0]); 
    for (int i = 1; i < numbers.length; i++) { //concatenate all that is left 
     sb.append(";"); 
     sb.append(numbers[i]); 
    } 
} 
String res = sb.toString(); 

или с com.google.common .base.Joiner:

String[] numbers = orig.split("\\D+"); //split at everything that is not a digit 
String res = Joiner.on(";").join(numbers); 

PS. Существует незначительное отклонение от требований в лучшем проголосовавшем примере, но, похоже, я не могу просто добавить один символ (должен быть replaceAll(", ", ";"), с пробелом после комы или \\s), и я не хочу испортить чей-то код.

Смежные вопросы