如何使用Jsoup精确匹配包含空格的指定文本内容?
解决Jsoup精确匹配带空格文本的问题
嘿,我明白你遇到的问题了——想用Jsoup精确选中文本完全匹配的<a>标签,但之前的:matches()选择器没达到预期效果。别担心,我给你两种可靠的解决方案:
方法1:使用:matchesOwn()配合精确正则
:matchesOwn()会只匹配元素自身的文本内容(不会包含子元素的文本,这里你的<a>标签没有子元素,所以非常适用),加上正则的^(开头)和$(结尾)就能实现精确匹配。注意处理文本里的单引号,在Java代码里可以这样写:
// 匹配精确文本 "Alzheimer's symptom" 的<a>标签 Elements exactLink = doc.select("a:matchesOwn(^Alzheimer's symptom$)");
如果你的代码里字符串引号有冲突,可以转义单引号:
Elements exactLink = doc.select("a:matchesOwn(^Alzheimer\\'s symptom$)");
方法2:使用文本属性选择器(Jsoup 1.14.0+)
从Jsoup 1.14.0版本开始,支持直接用[text()="精确文本"]的方式来匹配,这种写法更直观,不需要写正则:
Elements exactLink = doc.select("a[text()=\"Alzheimer's symptom\"]");
为什么之前的写法没生效?
你之前用的:matches(^String with spaces$),可能是因为没有正确处理选择器的引号包裹,或者:matches()会匹配元素的所有文本(包括子元素,但这里不是问题),但相比之下,:matchesOwn()或text()属性选择器在精确匹配场景下更可靠,能避免意外匹配到包含目标文本的长内容。
用上面任意一种方法,都能精准选中你想要的第二个<a>标签,而不会匹配第一个文本更长的标签。
内容的提问来源于stack exchange,提问作者ihossain
相关产品推荐
相关产品推荐

