使用正则表达式在java中选择HTML正文中具有特定字符的句子
我有一个html页面。我只想在句子/文本末尾有问号的标记中提取文本。我使用:使用正则表达式在java中选择HTML正文中具有特定字符的句子,java,regex,html-parsing,text-processing,Java,Regex,Html Parsing,Text Processing,我有一个html页面。我只想在句子/文本末尾有问号的标记中提取文本。我使用: <.+?>(.+?)<.+?> (.+?) 获取标签中的文本。但这有两个问题:1-所有嵌套的标记也被提取,我不想要。(我只想要纯文本)2-我只想得到那些标记中的文本,这些标记的末尾有一个问号 我不知道怎么做。有人能帮我一下吗。 PS:我拥有的html页面格式不正确,因此,使用诸如JSoup之类的工具不是一种选择。这就是我仅使用正则表达式的原因。如果有无限嵌套,则检测嵌套和不匹配很困难或不可能
<.+?>(.+?)<.+?>
(.+?)
获取标签中的文本。但这有两个问题:1-所有嵌套的标记也被提取,我不想要。(我只想要纯文本)2-我只想得到那些标记中的文本,这些标记的末尾有一个问号
我不知道怎么做。有人能帮我一下吗。
PS:我拥有的html页面格式不正确,因此,使用诸如JSoup之类的工具不是一种选择。这就是我仅使用正则表达式的原因。如果有无限嵌套,则检测嵌套和不匹配很困难或不可能,但您可以尝试以下方法:
<(.+?)>(.+?\?)</$1>
(.+?\?)
它匹配再次关闭的标记,并且仅在结尾处带有问号
请参见是否有充分的理由使用正则表达式 您可以自己分析html代码。也许它更快。。。如果
和
final LinkedList chunks=new LinkedList();
最终字符串text=“italictextanchor word”;
字符串rest=文本;
int pos;
而((pos=rest.indexOf(“?>”)!=-1)
{
final int-endTag=rest.indexOf(“”,endTag+1)+1);
}
System.out.println(块);
请阅读此答案:并使用HTML解析器,而不是regexps。HTML解析器通常应该对格式错误的文档有很强的抵抗力,所以试试吧。你们能举个格式错误的例子吗?如果您真的无法更正输入,那么简单的、基于非正则表达式的方法将是每次迭代输入字符,当您看到>时,开始缓冲纯文本,直到看到
final LinkedList<String> chunks = new LinkedList<String>();
final String text = "<i>italic</i><mytag?>text</mytag?><href>anchor</href> <mySecondTag?>word</mySecondTag?>";
String rest = text;
int pos;
while ( (pos = rest.indexOf("?>") )!=-1)
{
final int endTag = rest.indexOf("<", pos);
chunks.add(rest.substring(pos+2, endTag));
rest = rest.substring(rest.indexOf(">", endTag+1)+1);
}
System.out.println(chunks);