2013-05-22 2 views
-2

У меня есть строка, как:Заменить все строки, которые соответствует регулярному выражению Java

<scale_1>0</scale_1><scale_2>0</scale_2><scale_3>0</scale_3> 

Мне нужно как-то обрабатывать его, чтобы иметь:

<scale>0</scale><scale>0</scale><scale>0</scale> 

Я не силен в регулярных выражениях, я понятия не имею, как написать регулярное выражение, которое соответствует строке <scale_ с цифрой в конце.

Я пробовал:

String str = "<scale_1>0</scale_1><scale_2>0</scale_2><scale_3>0</scale_3>"; 
System.out.println(str.replaceAll("[<scale_1\\d+>]", "scale")); 

Но это просто печатает

scalescalescalescalescalescalescalescalescalescalescale/scalescalescalescalescalescalescalescalescalescalescalescalescalescalescalescalescalescalescale/scalescalescalescalescalescalescalescalescalescalescalescalescalescalescalescalescalescalescale/scalescalescalescalescalescalescalescale* 

Может кто-нибудь помочь мне с этим?

+0

Поскольку ни один из нижеприведенных ответов не объясняет это. , , проблема с вашим кодом заключается в том, что '[' и ']' не означает, что это так, как вы думаете. В регулярном выражении '[]' означает «любые' <',' s', 'c',' a', 'l',' e', '_',' 1', digit, '+', или '>'. Если вы должны были отбросить '' '' '' '' 'и удалить посторонний' 1', ваш код будет работать отлично. – ruakh

ответ

1

Вы можете использовать регулярное выражение:

string.replaceAll("_[0-9]+", ""); 
3

Вы можете просто использовать замену все с регулярным выражением _\d и заменить строку "".

+0

Вы имеете в виду 'String.replaceAll()', естественно :) – vikingsteve

+1

@vikingsteve Yup. OP должен хотя бы знать, какие функции использовать, правильно? – Jerry

+0

Я бы предположил, что, хотя я прямо ссылаюсь на метод String, поскольку это более простой подход, чем маршрут 'Pattern' /' Matcher'. – vikingsteve

0

Попробуйте это:

str = str.replaceAll("scale_\\d+", "scale"); 
2

Это регулярное выражение должно соответствовать вашим потребностям:

str.replaceAll("(</?scale)_[0-9]+(>)", "$1$2"); 

Приветствия.

+0

Нет @ M42, текст запечатлен (с скобкой) и переписан в заменяющей строке ($ 1). Я протестировал его перед публикацией! :) –

+0

Мой плохой, извините, я ошибся ;-) – Toto

+0

@ Эрик Хороший трюк! –

0
String str = "<scale_1>0</scale_1><scale_2>0</scale_2><scale_3>0</scale_3>"; 
str.replaceAll("<(/?)scale_\\d>", "<$1scale>"); 
System.out.println(str.replaceAll("<(/?)scale_\\d>", "<$1scale>")); 
+0

Это заменит '' '' ' – Toto

+0

@ M42 Извините, co отрезал его. –

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