2017-01-31 10 views
0

Каков наилучший способ в Java для выполнения следующей замены на струнных:Заменить Java Regex Захват группы с частями Собой

У меня есть текст, который выглядит примерно так:

one two [[**my_word** other words]] three four [[**my_other_word** other words]] five six 

и я хочу следующий текст

one two **my_word** three four **my_other_word** five six 

Я попытался использовать группы захвата регулярных выражений, но как я могу заменить одну группу захвата на другую?

+1

Можете ли вы показать, что вы пытались и где вы застряли? – CKing

+0

Каждая группа имеет число $ 1, $ 2, $ 3 ... Тогда u может использовать ее. $ 1 = захваченная группа 1, пример $ 1 = картофель => «hi $ 1» (картофель). –

+0

Я застрял, когда попытался использовать API Java и Matcher API. – xgb84j

ответ

1
a.replaceAll("\\[\\[(\\*\\*\\w+\\*\\*)(?:\\s\\w+\\s?)+\\]\\]", "$1"); 
+0

Одиночные обратные косые черты, которые вы используете, недействительны в качестве символов escape-символов регулярных выражений в java. Они должны быть двойной обратной косой чертой. – Falle1234

+0

Эй, я просто хотел рассказать вам о последнем вопросе на C++. У вас была ошибка при ошибке. 'std :: vector base (values-> begin() + 1, values-> begin() + 4);' дает только первые 3 элемента. Вам нужно изменить 4 на 5, чтобы получить первые 4 элемента. – NathanOliver

+0

@NathanOliver ах, я знал, что это будет глупая ошибка. Не знал, были ли это инклюзивные или эксклюзивные конечные ограничения. Благодаря! –

1

В зависимости от того, что ваши потребности, вы можете либо использовать Oneliner как

a.replaceAll("\\[\\[(\\*\\*\\w+\\*\\*).*?\\]\\]", "$1"); 

Or тем больше c omplicated version, где вы можете контролировать, что заменить каждый матч.

String inputString = "one two [[**my_word** other words]] three four [[**my_other_word** other words]] five six"; 
Pattern pattern = Pattern.compile("\\[\\[(\\*\\*\\w+\\*\\*).*?\\]\\]", Pattern.DOTALL); 
Matcher matcher = pattern.matcher(inputString); 
StringBuffer outputBuffer = new StringBuffer(); 
while (matcher.find()) { 
    String match = matcher.group(1);   
    matcher.appendReplacement(outputBuffer, match); 
} 
matcher.appendTail(outputBuffer); 

String output = outputBuffer.toString();