2017-02-21 26 views
1

У меня есть код:Regex регулярное выражение Java Строка

private static final Pattern TAG_REGEX = Pattern.compile("<p>(.+?)</p>"); 
private static List<String> getTagValues(final String str) { 
    final List<String> tagValues = new ArrayList<String>(); 
    final Matcher matcher = TAG_REGEX.matcher(str); 
    while (matcher.find()) { 
     tagValues.add(matcher.group(1)); 
    } 
    return tagValues; 
} 
      System.out.println(Arrays.toString(getTagValues(stringText).toArray())); 

и я хочу получить от этого:

"<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>" 

Я хочу только текст beetwen <p> и </p>

i want get only this: 

"Aa aa Aa aa aa Aa aa aa aa Aa aa B b b" 

Но я не знаю, что мне нужно написать в Pattern.compile(""); кому-нибудь помочь?

+0

это 'Аа аа, аа. 'может быть между'

'и'

' –

+0

' Jsoup' также может выбрать все теги 'p', но опять же будет выпущено' Aa aa, aa. 'потому что не находится внутри' p', и где-то у вас также есть 'b' тег внутри' p' –

ответ

0

Вам не нужно ни Pattern Matcher для этого, вы могли бы сделать строки замены вместо :

str.replaceAll(".*?(<p>.*</p>).*", " $1 ").replaceAll(".*?<p>(.*?)</p>.*?", " $1 ").replaceAll("<[/a-z]+>", " ").replaceAll("[,.]", " ").replaceAll(" +", " ")

It не выглядит красиво, но он получает работу :)

+0

спасибо, но это полезно, но я добавляю некоторые изменения в свое сообщение, потому что ошибка была неправильной, мне не нужно Aa aa, aa. в моем выпуске, так что вы знаете, что я должен отредактировать вам код, который он будет работать? – JavaCoder

+0

Я обновляю свой ответ, чтобы согласовать его с ответом. Пожалуйста, проголосуйте за мой ответ, если он сработает для вас. Благодарю. – artemisian

+0

"\ $ 1" это дает мне ошибку в eclipse, 'Invalid escape sequence (valid are are \ b \ t \ n \ f \ r \" \ '\\) 'this is error – JavaCoder

2

Я рекомендую использовать JSOUP анализатор для извлечения данных из HTML кода

1.) Parse данных в Document используя Jsoup.parse(string) функции.

2.) Получите данные body тега как Element.

3.) Извлеките текст тега Element, используя element.text().

4.) При необходимости вы можете использовать replaceAll("\\s*[,.]\\s*",""), чтобы удалить все поля для заметок и чисел и форматирования.

String stringText = "<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>"; 
    Document document =Jsoup.parse(stringText); 
    Element element=document.body(); 
    String plain_String = element.text().replaceAll("\\s*[,.]\\s*"," "); 
    System.out.println(element.text()); // Actual text 
    System.out.println(plain_String); // Formatted text 

Выходные:

Aa , aa. Aa aa, aa. Aa aa aa, aa. Aa, aa. B, b, b.Aa aa, aa. 
Aa aa Aa aa aa Aa aa aa aa Aa aa B b b Aa aa aa 

Download Jsoup и добавить его в качестве зависимости

\\s*[,.]\\s*: \\s* матч ноль или более пробелов

[,.]: соответствует любому символу, упомянутый в [] означают ,.


Если вы настаиваете regex раствор затем использовать

1.) Сначала удалите все ненужные символы, такие как ,. и пробелы с replaceAll("\\s*[.,]\\s*", " ")

2.) Используйте регулярное выражение <p[<>ib]*>([\\w\\s]+)<\\/[\\w]> с Pattern и Matcher найти текст между тегами

3.) Append найденный текст в StringBuilder и отображения результата

Код

String str = "<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>"; 
    Pattern pattern = Pattern.compile("<p[<>ib]*>([\\w\\s]+)<\\/[\\w]>"); 
    Matcher matcher = pattern.matcher(str.replaceAll("\\s*[.,]\\s*", " ")); 
    StringBuilder builder = new StringBuilder(); 
    while (matcher.find()) { 
     builder.append(matcher.group(1)); 
    } 
    System.out.println(builder); 

Выход:

Aa aa Aa aa aa Aa aa aa aa Aa aa B b b 
+0

на всякий случай, если вы хотите, чтобы все данные 'p' были использованы, используйте' document.getElementsByTag ("p"). Text () ', но снова результирующая строка не будет содержать' Aa aa, aa. 'текстовые данные, потому что это не внутри' p' tag –

+0

да я редактирую свое сообщение, что я хочу этот текст без Aa aa, aa., но я могу; t использовать этот Jsuop, потому что я должен отправлять только файл в java без jsoup – JavaCoder

0

Вы можете попробовать это:

String str = "<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>"; 
String start = ">", end = "<"; 
String regexString = Pattern.quote(start) + "(.*?)" + Pattern.quote(end); 
Pattern pattern = Pattern.compile(regexString); 
Matcher matcher = pattern.matcher(str.replaceAll("[.,]", "")); 
while (matcher.find()) { 
    if (!matcher.group(1).replaceAll("\\s{2,}", " ").trim().equals("")) { 
     System.out.print(matcher.group(1).replaceAll("\\s{2,}", " ") + " "); 
    } 
} 

Это дает:

Aa aa Aa aa aa Aa aa aa aa Aa aa B b b Aa aa aa 
+0

спасибо, это полезно, но я добавляю некоторые изменения к своему сообщению, потому что ошибка была неправильной, мне не нужно Aa aa, aa. в моем выпуске, поэтому вы знаете, что я должен отредактировать вам код, который он будет работать? – JavaCoder

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

  • Нет связанных вопросов^_^