2014-01-31 7 views
3

Мне нужно заменить все небуквенные символы, которые появляются в начале перед любой буквой напримерRegex заменить все ведущие символы не Az

$% 5hello w8r^л.д. становится привет w8r^л.д.

Это регулярное выражение я теперь работает Greate для замены символов ни слова, но не заменяет число

s.replaceFirst("^[\\W_]+", "") 
+0

'\\ w' означает« символы слова », но это действительно означает символы, которые могут быть в идентификаторе на большинстве языков, то есть' A-Z', 'a-z',' 0-9' и '_'. '\\ W' означает все, кроме тех. Вот почему он не заменил цифры. Вы можете использовать '[\\ W_ \\ d]', чтобы добавить цифры обратно, как вы уже делали с '_', но я думаю, что' [^ A-Za-z] 'яснее. – ajb

ответ

5

Вы используете WRO ng. Используйте

s.replaceFirst("^[^a-zA-Z]+", "") 

Это

^   start at the beginning of the string 
[^ ]+  one or more (greedy - keep going until you hit a letter 
a-zA-Z  ascii characters between a-z or A-Z 

После комментариев от @anubhava, я изменил * к +. Если у вас нет соответствия, нет ничего, что нужно заменить. Это на самом деле чище.

+0

Если нет ничего, то зачем замечать это с помощью '' "' – anubhava

+1

@anubhava fair point - мне нравится, чтобы мои выражения соответствовали тому, что я говорю, я хочу совместить ... «Если есть что-то вроде этого». Я думаю, что '+' означает «заменять только, если что-то стоит заменить». Я соответствующим образом обновил свой ответ. – Floris

+1

Да, это лучше спасибо +1, :) – anubhava

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