[英]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.