正则表达式的正则表达式的Java字符串
我有代码:正则表达式的正则表达式的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("");
有人帮忙?
你不需要模式匹配器也不为,你可以做一个替换字符串代替:
str.replaceAll(".*?(<p>.*</p>).*", " $1 ").replaceAll(".*?<p>(.*?)</p>.*?", " $1 ").replaceAll("<[/a-z]+>", " ").replaceAll("[,.]", " ").replaceAll(" +", " ")
它看起来并不漂亮,但是它干得不错:)
谢谢它是有帮助的,但我添加了一些编辑我的文章,因为outpus错了,我不需要Aa aa,aa。在我的输出,所以你知道我必须编辑你的代码,它会工作? – JavaCoder
我已经更新了我的答案,以便与您对答案的修改保持一致。如果它适合你,请投票给我的答案。谢谢。 – artemisian
“\ $ 1”这给我一个错误在eclipse中,'无效的转义序列(有效的是\ b \ t \ n \ f \ r \“\'\\)'这是错误 – JavaCoder
我建议使用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]>
与Pattern
和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
里面有'b'标记,以防万一,如果你想要所有'p'标签数据,使用'document.getElementsByTag(“p”)。text )'但是结果字符串不会包含'Aa aa,aa。'文本数据,因为它不在'p'标签里 –
是的我编辑我的文章,我想这个文本没有Aa aa,aa。但我可以;使用这个Jsuop,因为我必须发送只有文件在java中没有jsoup – JavaCoder
你可以试试这个:
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
感谢它是有帮助的,但我添加了一些编辑我的帖子,因为outpus错了,我不需要Aa aa, aa。在我的输出中,所以你知道我必须编辑你的代码 将工作? – JavaCoder
这个'AA AA,AA。'可以在'
'和'
' –'Jsoup'也可以选择所有的'p'标签数据,但是再次发布的将是'Aa aa,aa。'因为不在'p'里面,并且在'p' –