2014-12-03 6 views
0

Я работаю над написанием java для вставки '*', где умножение будет выполнено, так что 5sqrt (25) будет 5 * sqrt (25) и так далее. Для этого я использую regexp для сопоставления числа рядом с буквой «(\ d) ([az]) к проблеме, которую я имею, это то, что буквы и числа после первого соответствия заменяются буквами, которые соответствуют (5) «Я бы получил вывод » 5 * sqrt (25) +8 5 * s unction (4) "и пример кода, который я нахожу используюRegex заменить и вставить

public static void demo(){ 
    String regex = "(\\d)([a-z])"; 
    String demo = "5t 8x 9y"; 

    Pattern pat = Pattern.compile(regex); 
    Matcher mat = pat.matcher(demo); 

    if(mat.find()){ 
     System.out.println(mat.replaceAll(mat.group(1) + "+" + mat.group(2))); 
    } 

} 

это из путы 5 + т 5 + т 5 + т, вместо 5 + т 8 + х 9 + у, что я хочу.

как я должен идти об этом?

ответ

0

Используйте функцию string.replaceAll.

System.out.println("5t 8x 9y".replaceAll("(\\d)([a-z])", "$1+$2")); 

Выход:

5+t 8+x 9+y 
+0

так что $ является способом обращения к группам? спасибо – tarFish

+0

yep, вы правы. '$ 1' относится к группе 1, а' $ 2' относится к группе 2. –

0
(?<=\\d)(?=[a-z]) 

Вместо использования matches вобще replace .Привернуть с *.

См. Демонстрационную версию.

http://regex101.com/r/yR3mM3/23

+0

Что делает внешний вид? зачем их добавлять? – tarFish

+0

@tarFish try 'string.replaceAll (" (? <= \\ d) (? = [A-z]) "," * ")'. Так что вам не требуется захват – vks

0

Заменить все хорошо подходит в данном случае. Вы можете попробовать:

<target_string>.replaceAll("(\\d)([a-z])", "$1*$2") 
Смежные вопросы