2013-11-17 3 views
0

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

Мне нужно, чтобы удалить все не белые пробелы и все не буквы:

Моя картина:

String content=readUrl(); 
content.replaceAll("(\\S)|(^\\[a-z])", ""); 

И это не работает.

Почему мое регулярное выражение заменяет все?

ответ

4

Вы можете использовать отрицание класса символов:

(?i)[^\\sa-z]+ 

или лучше, если вы хотите поддерживать все алфавиты:

[^\\s\\p{L}]+ 
+0

Спасибо, но что означает (? I)? –

+0

@VolodymyrLevytskyi: Это нечувствительный к регистру модификатор. (это способ поставить его прямо внутри шаблона) –

+0

Спасибо. Это была большая помощь. –

0

разбив его:

content.replaceAll("(\\S)|(^\\[a-z])", ""); 

заменит все который соответствует шаблону. Значение | означает, что последовательность соответствует шаблону, если она соответствует части слева, или соответствует строке справа. Образец слева, (\\S), соответствует каждому символу, который не является пробелом. Таким образом, каждый символ, который не является пробелом, будет соответствовать и будет устранен. Я думаю, что часть справа будет соответствовать только в том случае, если ваша строка начинается с пяти символов [a-z] (так как вы сказали, что это буквально обрабатывает [), поэтому это действительно не влияет на результат. Но результат будет заключаться в том, что результатом будет просто пустое пространство.

+0

Отличное объяснение. Нужно также создавать несколько руководств по регулярному выражению. –

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