我有一个HTML文档,在其中我需要能够在文档文本中查找可能包含或不包含连字符的精确匹配项。我正在使用Java和Jsoup。

例如,HTML文档可以具有以下内容:

<li>some text ABCDE some text</li>
<li>some text ABCDE-kriterierna some text</li>


要么

<li>ABCDE</li>
<li>ABCDE-kriterierna</li>


我有一个输入字符串列表,需要将其与HTML文档中的文本进行匹配。这些输入字符串中的两个可以是“ ABCDE”和“ ABCDE-kriterierna”。
我需要一种使用Jsoup或正则表达式的方法,以完全匹配这些输入单词。也就是说,“ ABCDE-kriterierna”应该只找到第二个列表元素,而不是第一个。输入的单词“ ABCDE”应该只找到第一个列表元素,而不是第二个。

输入的单词“ ABCDE-kriterierna”没问题。此Jsoup CSS选择器将仅找到第二个列表元素:

:containsOwn(ABCDE-kriterierna)


问题是我找不到输入词“ ABCDE”的正则表达式/选择器,只能找到第一个列表元素。我不能使用正则表达式\sABCDE\s,因为我不能假设周围有空格。
我尝试了以下方法,但所有方法也都找到了“ ABCDE-kriterierna”。

:matchesOwn(\bABCDE\b)
:containsOwn(ABCDE)


有任何想法吗?请帮忙...

最佳答案

我不能假设周围有空间,因为ABCDE可能是元素中的唯一文本


请记住以上情况,有两种情况会发生。


ABCDE是一个由空格包围的单词。例如:<li>some text ABCDE some text</li>
ABCDE是列表标记中的唯一单词,没有空格。例如:<li>ABCDE</li>


正则表达式:(?<=[>\s])ABCDE(?=[<\s])

说明:

(?<=[>\s])将向后寻找>(li标签的闭合角度)或\s空格。

ABCDE将搜索文字。

(?=[<\s])将提前查找<(li标签的打开角度)或\s空白。

Regex101 Demo

10-04 15:45