簡體   English   中英

正則表達式正則表達式Java字符串

[英]Regex regular-expression Java String

我有代碼:

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("");寫什么Pattern.compile(""); 有人幫忙嗎?

我建議使用JSOUP解析器從HTML代碼中提取數據

1.)使用Jsoup.parse(string)函數將數據解析為Document

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 

下載Jsoup並將其添加為依賴項

\\\\s*[,.]\\\\s*\\\\s*匹配零個或多個空格

[,.] :匹配[]表示中的任何字符,.


如果您堅持使用regex解決方案,請使用

1.)首先刪除所有不需要的字符,如,. 和帶有replaceAll("\\\\s*[.,]\\\\s*", " ")空格

2.)使用正則表達式<p[<>ib]*>([\\\\w\\\\s]+)<\\\\/[\\\\w]>Pattern and Matcher在標簽之間查找文本

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 

您不需要使用Pattern或Matcher,而是可以使用String替換:

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

它看起來不漂亮,但是可以完成工作:)

您可以嘗試以下方法:

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM