2017-04-22 86 views
0

我有一个HTML文档,我需要能够在文档文本中找到可以或不可以包含连字符的精确匹配。我使用Java和Jsoup。在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) 

任何想法?请帮助...

+0

如果'ABCDE'由空格包围,你可以使用'\ s',而不是'\ B'。 – Rahul

+0

@Rahul不幸的是,情况并非总是如此。我已经更新了问题中的示例。 – poa

+0

_我有一个输入单词列表_:当你说**单词**时,它是在自然语言的背景下,如英语。然后它应该被空间包围。 – Rahul

回答

0

我不能假设周围的空间,因为ABCDE可以在一个元素的纯文本

饲养上述条件考虑有以下两种情况下发生这种情况。

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

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

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

说明:

(?<=[>\s])将回顾后为>(闭合李标签的角度)或\s一个空格。

ABCDE将搜索文字词。

(?=[<\s])将向前看<(li tag的打开角度)或\s一个空格。

Regex101 Demo

相关问题