Как заменить блок текста с помощью регулярных выражений и Java - PullRequest
1 голос
/ 20 января 2012

У меня та же проблема, но мне нужно получить:

---- comment 3;comment 2;comment 1

От:

* (20-01-2012 12:53) : ---- comment 3<br/>* (20-01-2012 12:50) : comment 2<br/>* (20-01-2012 12:50) : comment 1

Что означает, что мой код должен быть:

string.replaceAll("\\*?.*?:", ";")

Правильно?

Но это заменяет все от первого * до последнего: так что я получаю:

comment 1 

в результате.Справка!

Связано с Заменить / удалить строку из двух символов

Ответы [ 3 ]

1 голос
/ 20 января 2012

В предыдущем ответе он использовал #? в качестве разделителя. Здесь вы пишете \*?, что означает совпадение * буквально или ничего. .*? будет соответствовать чему-либо до :. Это означает, что произойдет многократная замена и удаление чего угодно до двоеточия (в комплекте). В вашей замененной строке должно быть несколько ;.

Шаблон, который я вижу:

* (...) : ... comment 1<br/>

С <br/> необязательно.

Таким образом, попробуйте регулярное выражение вроде:

\* \([^)]*\) : ((?:.*?)comment \d+)(?:<br/>)?

Обратите внимание, что (?: ... ) делает регулярное выражение в скобках не группирующимся. Вы можете проверить результат на http://rubular.com/r/orViHMJEMr

Приведенное здесь регулярное выражение позволяет вам получить комментарии.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRegex {
    public static void main(String[] args) {
        String pattern_string = "\\* \\([^)]*\\) : ((?:.*?)comment \\d+)(?:<br/>)?";
        String input_string = "* (20-01-2012 12:53) : ---- comment 3<br/>* (20-01-2012 12:50) : comment 2<br/>* (20-01-2012 12:50) : comment 1";

        Pattern pattern = Pattern.compile(pattern_string);
        Matcher matcher = pattern.matcher(input_string);
        while (matcher.find()) {
            System.out.println(matcher.group(1));
        }
    }
}
1 голос
/ 20 января 2012

myString = myString.replaceAll("\\*\\s+\\(.*?\\)\\s+:\\s+", "").replaceAll("<br/>", ";");

Это работает, я пробовал. Первая заменаВсе заменяет префикс * (date/time) : из строк, а вторая заменаВсе заменяет <br/> с ; с.

0 голосов
/ 20 января 2012

Похоже, вам нужно заменить <br/>* (20-01-2012 12:50) : на ;.

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

(<br/>)\*\s*\(.*?\)\s*:\s*

Соответствующая часть должна быть заменена на ;.

Для начальной части регулярное выражение должно быть:

^\*\s*\(.*?\)\s*:\s*

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...