2010-04-22 164 views
1

鑑於以下字符串嵌入在文本中,我如何提取整行,但不匹配內部「<」和「>」?正則表達式:跳過/忽略模式

<test type="yippie<innertext>" /> 

編輯
作爲更具體的,我們需要處理如下,其中「類型」有或沒有「<」和「>」字符都使用情況。

<h:test type="yippie<innertext>" /> 
<h:test type="yippie"> 

Group 1: 'h:test' 
Group 2: ' type="yippie<innertext>" ' -or- ' type="yippie"' (ie, remaining content before ">" or "/>") 

到目前爲止,我有類似的東西,但它有點不像第2組停在第一個「>」。調整第2組的條件的第一部分。

(<([a-zA-Z0-9_:-]+)([^>"]*|[^>]*?)\s*(/)?>) 

感謝您的幫助。

回答

2

試試這個:

<([:\w]+)(\s(?:"[^"]*"|[^/>"])+)/?> 

用法示例(Python)的:

>>> x = '<h:test type="yippie<innertext>" />' 
>>> re.search('<([:\w]+)(\s(?:"[^"]*"|[^/>"])+)/?>', x).groups() 
('h:test', ' type="yippie<innertext>" ') 

還要注意的是,如果你的文檔是HTML或XML,那麼你應該使用,而不是試圖以HTML或XML解析器用正則表達式來做這件事。

+0

是的,你在上面。我應該更清楚和完整。我需要將匹配的標籤名稱和剩餘批次進行分組。往上看。 – cwall 2010-04-23 04:03:11

0

它看起來像你試圖用正則表達式解析XML/HTML。我會說你的做法是根本錯誤的。足夠先進的正則表達式與XML解析器無法區分。畢竟,如果你需要什麼樣的解析:

<test type="yippie<inner\"text\"_with_quotes,_literal_slash_and_quote\\\">" /> 

此外,你可能需要躲避內<>&lt;&gt;

欲知原因,你不應該與一個正則表達式解析XML,我只能屈服於這個優越的答案:

RegEx match open tags except XHTML self-contained tags

+0

我希望我能。現有的實施迫使我的手。 – cwall 2010-04-23 04:32:41