2017-04-22 87 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

相關問題