регулярное выражение, чтобы разделить строку, содержащую теги по пробелам, но не разбивая теги в Java - PullRequest
2 голосов
/ 29 июня 2011

Я пытаюсь сформировать регулярное выражение, которое функционирует, как указано ниже:

String killing of <span class="abc">cats</span>, hi <span class="xyz">dogs</span>,

Разбивается на:

1. killing
2. of
3. <span class="abc">cats</span>,
4. hi
5. <span class="xyz">dogs</span>,

Это регулярное выражение \\<.*?\\>| разбиваетсяэто, но теги удаляются, а , после тегов - новая строка.

Ответы [ 3 ]

1 голос
/ 29 июня 2011

Не могу помочь с split(), но вот решение с последовательным find():

final String s =
    "killing of <span class=\"abc\">cats</span>, "
    + "hi <span class=\"xyz\">dogs</span>,";
final Matcher matcher = Pattern.compile(
    "(<.*?>.*?</.*?>|\\w+)\\p{Punct}*").matcher(s);
while (matcher.find()) {
    System.out.println(matcher.group());
}

Выход:

killing
of
<span class="abc">cats</span>,
hi
<span class="xyz">dogs</span>,
1 голос
/ 29 июня 2011
String[] items = s.split("(?<=^|>)[^><]+?(?=<|$)");

Я пробовал это выше.Работает отлично.

ОБНОВЛЕНИЕ

    String str = "killing of <span class=\"abc\">cats</span>, hi <span class=\"xyz\">dogs</span>";
    Pattern p = Pattern.compile("(?<=^|>)[^><]+?(?=<|$)");
    Matcher m = p.matcher(str);

    int start = 0;
    int end =0;
    while(m.find()){
        start = m.start(0);
        end = m.end(0);
       String items[] = str.substring(start, end).split("\\s");
        for(String item:items){
                   System.out.println(item);
        }
    }
}
0 голосов
/ 29 июня 2011

Добавьте группу вокруг пробела и часть тега и укажите эту группу для пробела в вызове replaceAll.

, чтобы ваше регулярное выражение выглядело как (\\ s) (\\ <. *? \\>)?

, затем выполните replaceAll только для группы 1, чтобы заменить ее наперевод строки.(помните, что группа 0 - это полное совпадение, поэтому 1 будет только пробелом).Если может быть больше одного пробела, добавьте плюс после (\\ s).

Для примеров того, как заменить использование групп, смотрите вопрос: Java Regex Replace with Capturing Group

Я постараюсь поставить пример Java позже.Но я надеюсь, что это пока направит вас в правильном направлении.

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