2012-06-01 55 views
1

我有一個小問題。我正試圖讓文本超出html元素。 例輸入:如何從正則表達式獲得文本「

I want this text I want this text I want this text <I don't want this text/> 
I want this text I wan this text <I don't>want this</text> 

有誰知道它是如何可能通過正則表達式?我認爲我可以刪除元素文本。那麼,有沒有人知道這個問題的另一個解決方案?請幫幫我。

+0

所以,你想外面的一切'< ... />' –

+0

是的...但我也想要外面的文字<...> ... user35443

回答

1

我同意任何不平凡的東西都應該用HTML解析器來完成(如果你使用.NET,Agility pack是非常好的),但是對於小的需求,因爲這很可能過度殺傷。 然後,HTML解析器再次瞭解HTML充滿的怪癖和邊緣情況。使用正則表達式之前一定要測試好。

在這裏你去

<.*?>.*?<.*?>|<.*?/> 

它還正確忽略

<I don't>want this</text> 

,而不僅僅是標籤

在C#這成爲

string resultString = null; 
resultString = Regex.Replace(subjectString, "<.*?>.*?<.*?>|<.*?/>", ""); 
+0

更新:切換交替的選項 – buckley

1

嘗試此

(?<!<.*?)([^<>]+) 

說明

@" 
(?<!  # Assert that it is impossible to match the regex below with the match ending at this position (negative lookbehind) 
    <   # Match the character 「<」 literally 
    .   # Match any single character that is not a line break character 
     *?   # Between zero and unlimited times, as few times as possible, expanding as needed (lazy) 
) 
(   # Match the regular expression below and capture its match into backreference number 1 
    [^<>]  # Match a single character NOT present in the list 「<>」 
     +   # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
) 
" 
+0

我會試試它。感謝您的快速響應。 – user35443

3

代替正則表達式的,這是not suitable for parsing HTML in general(尤其不良HTML),可使用一個HTML解析器像HTML Agility Pack

什麼是Html Agility Pack(HAP)?

這是一個敏捷的HTML解析器,它構建了一個讀/寫DOM並支持普通的XPATH或XSLT(實際上,您不需要理解XPATH或XSLT就可以使用它,不用擔心)。它是一個.NET代碼庫,允許您解析「離開網頁」的HTML文件。解析器對「真實世界」格式錯誤的HTML非常寬容。對象模型與提出System.Xml非常相似,但是對於HTML文檔(或流)。