2009-11-26 10 views
1

我有一些文檔存儲爲大型字符串。在字符串中,我有一些內嵌的XML標記,我想知道標記之間的單詞。這些文檔也可能包含HTML標籤,因爲這些文檔通常是網站。Java:RegEx問題(使用'。'所有字符符號)

實例文檔:

「< TR>我的名字是< B> < PERSON>鮑比< /人> </b>中,我住在美國」

當前正則表達式:

Pattern p = Pattern.compile("<(LOCATION|PERSON|ORGANIZATION)>[\\w[ '\"/\\!%$\\(\\)\\-\\+]]*</(LOCATION|PERSON|ORGANIZATION)>"); 

Matcher m = p.matcher("I'm <PERSON>Graham Brown</PERSON> I went to the <LOCATION>USA'S</LOCATION>"); 

while(m.find()){ 
    System.out.println(m.group()); 
} 

結果= < PERSON>鮑比< /人> <位置>美國< /位置>

這正常工作與幾乎大多數標點符號和語法,但正則表達式應該允許在標籤之間找到任何字符模式。當我嘗試使用'。'時(任何字符),如下所示,它返回整個字符串。

「< TR>我的名字是< B> < PERSON>鮑比< /人> </b>中,我住在美國。」

Pattern p = Pattern.compile("<(LOCATION|PERSON|ORGANIZATION)>.</(LOCATION|PERSON|ORGANIZATION)>"); 

如何返回角openinng和結束標記之間的任何字符?

編輯:感謝您的回覆。只是爲了幫助得到正確的答案。 澄清我已經使用NER標記了命名實體。如果您不清楚這是什麼,請參閱我在底部引用的一些論文。

我感興趣的是獲取三個開始和結束標記之間的文本。沒有其他標籤,文檔不是XML文件,我不解析所有的HTML標籤,也不是我對它們感興趣。我所感興趣的是解析我創建的XML標籤,因此儘管RegEx是最簡單的方法。

論文稍後添加...

+0

親愛的上帝,你爲什麼不使用某種類型的XML解析器?那個正則表達式是純粹的* evil *。 – abyx 2009-11-26 09:50:47

+0

用正則表達式解析HTML?這是一個壞主意 – 2009-11-26 09:50:48

+2

你一定看到這個:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – vahidg 2009-11-26 09:54:52

回答

4

打上問號.*?後非貪婪的過程。 PS:我只是糾正你的正則表達式,但這並不意味着它是解決方案。我不知道這是否是解決方案。使用解析器總是更好的主意。

+0

感謝您對RegEx的幫助,這不是我經常做的事情,我也沒有真正通過大量XML標籤進行潛水。我只是需要在3個不同的標籤之間提取文本,並且通過RegEx可以快速完成這個任務,因爲我沒有在Java中使用很多解析器。 – binarycreations 2009-11-26 12:06:44

-1

請使用XML parser作爲XML片段。這是您的問題的右側工具

編輯: 並使用HTML消毒器預處理HTML文件。另外爲XML定義嚴格的XML模式以確保XML結構。

+2

您認爲XML解析器是解析可能包含原始文本或html的文檔中的一些稀疏XML標籤的正確解決方案嗎?我認爲在這種情況下,他將XML標記視爲元數據的簡單形式,而不是真正的樹狀結構。爲了解析出其他文檔中的元數據標籤,regexp可能是非常正確的解決方案。 – Benj 2009-11-26 10:06:40

+0

我只會用XML解析器解析** XML片段**(請參閱我的答案)。 – 2009-11-26 10:24:44

+0

我不需要清理NER的HTML文件,請參閱編輯和註釋。 Benj有正確的想法。 – binarycreations 2009-11-26 12:09:30

-1

只有一個對於這個問題的答案:You can't parse HTML with regex

+0

我不是用正則表達式解析HTML,請參閱編輯和註釋。 – binarycreations 2009-11-26 12:10:06

+0

NER是XML,參考文章也適用於XHTML,因此適用於XML。但無論如何,祝你好運RegExp。希望沒有人能永遠保持那個野獸。 (http://www.jdom.org/) – 2009-11-26 12:29:05

+0

+1軟件維護是什麼? – 2009-11-26 12:33:49