2013-06-02 6 views
1
string = str.replaceAll("\\W", " ") 

Это заменит все специальные символы на "" (пробел).Заменить все специальные символы, кроме одного

Но я стараюсь исключить тире «-» как особый символ.

Это моя попытка:

string = str.replaceAll("\\W[^-]", " ") 

Но это не то, что я ожидал.

Q: Как я могу сделать эту работу?

ответ

9

Если вы хотите, чтобы все символы, кроме \w и - вы можете использовать:

[^\w-] 

Например:

str.replaceAll("[^\\w-]+", " ") 
3

Используйте инвертированный символьный класс ...

string = str.replaceAll("[^\\w-]", " ") 

\W отлично подходит для удобства, но когда вам нужно добавить дополнительные символы в вашем бассейне, вы должны использовать класс символов с \w.

Причина этого не работает ...

string = str.replaceAll("\\W[^-]", " ") 

..., потому что это сканирование символов без слов ([^A-Za-z0-9_]), а затем не- характер. Например, /A будет соответствовать, но /- не будет.

4

Qtax's answer, вероятно, самый простой в данном конкретном случае, так как есть встроенное дополнение к \W, а именно \w. Но в целом, это полезно знать, что движок регулярных выражений в Java поддерживает «перекрестки» в классах символов с оператором && - вы можете сказать

[\W&&[^-]] 

, чтобы соответствовать один символ, который является одновременно \Wи[^-], т.е. не-словный символ, но не дефис.

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