使用jsoup在html中查找包含连字符的确切文本

时间:2017-04-22 21:09:41

标签: java html css regex jsoup

我有一个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或regex的方法来准确匹配这些输入单词。也就是说,“ABCDE-kriterierna”应该只找到第二个列表元素,而不是第一个。输入字“ABCDE”应该只找到第一个列表元素,而不是第二个。

输入字“ABCDE-kriterierna”没问题。这个Jsoup CSS选择器只能找到第二个列表元素:

:containsOwn(ABCDE-kriterierna)

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

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

有什么想法吗?请帮忙......

1 个答案:

答案 0 :(得分:0)

  

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

在发生这种情况时,请注意上述情况。

  1. ABCDE是一个被空格包围的单词。例如:<li>some text ABCDE some text</li>

  2. ABCDE只是列表标记中的单词,没有空格。例如:<li>ABCDE</li>

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

    说明:

    (?<=[>\s])将为>(li标记的结束角度)或\s空格看待。

    ABCDE会搜索文字。

    (?=[<\s])会预见<(li标签的开放角度)或\s空格。

    <强> Regex101 Demo