2017-02-21 280 views
1

我有代碼:正則表達式的正則表達式的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

這個'AA AA,AA。'可以在'

'和'

' –

+0

'Jsoup'也可以選擇所有的'p'標籤數據,但是再次發佈的將是'Aa aa,aa。'因爲不在'p'裏面,並且在'p' –

回答

0

你不需要模式匹配器也不爲,你可以做一個替換字符串代替:

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

它看起來並不漂亮,但是它幹得不錯:)

+0

謝謝它是有幫助的,但我添加了一些編輯我的文章,因爲outpus錯了,我不需要Aa aa,aa。在我的輸出,所以你知道我必須編輯你的代碼,它會工作? – JavaCoder

+0

我已經更新了我的答案,以便與您對答案的修改保持一致。如果它適合你,請投票給我的答案。謝謝。 – artemisian

+0

「\ $ 1」這給我一個錯誤在eclipse中,'無效的轉義序列(有效的是\ b \ t \ n \ f \ r \「\'\\)'這是錯誤 – JavaCoder

2

我建議使用JSOUP解析器HTML代碼

1)將給您的數據Document使用Jsoup.parse(string)函數來提取數據。

2.)獲取body標籤的數據爲Element

3.)使用element.text()獲取Element標籤的文本。

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]>PatternMatcher找到你的文字標籤之間

3。)追加找到的文本中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

裏面有'b'標記,以防萬一,如果你想要所有'p'標籤數據,使用'document.getElementsByTag(「p」)。text )'但是結果字符串不會包含'Aa aa,aa。'文本數據,因爲它不在'p'標籤裏 –

+0

是的我編輯我的文章,我想這個文本沒有Aa aa,aa。但我可以;使用這個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

感謝它是有幫助的,但我添加了一些編輯我的帖子,因爲outpus錯了,我不需要Aa aa, aa。在我的輸出中,所以你知道我必須編輯你的代碼 將工作? – JavaCoder