我有一些HTML內容需要使用C#修改。這在概念上很簡單,但我不確定如何有效地做到這一點。內容包含幾個分隔符號碼後面跟着一個空的錨點標記。我需要獲取分隔號碼並將其插入到錨標記中的JavaScript函數調用中。例如。使用正則表達式轉換字符串
源字符串將包含這樣的事情:
%%1%%<a href="#"></a>
<p>A bunch of HTML markup</p>
%%2%%<a href="#"></a>
<p>Some more HTML markup</p>
我需要把它轉換成這樣:
<a href="#" onclick="DoSomething('1')></a>
<p>A bunch of HTML markup</p>
<a href="#" onclick="DoSomething('2')></a>
<p>Some more HTML markup</p>
沒有限制%% \ d + %%出現的次數。我在寫一個正則表達式時希望能夠使用Replace方法,但我不確定這是否甚至可以用於每個組的多個實例。這是我有:
%%(?<LinkID>\d+)%%(?<LinkStart><a[\s\S]*?)(?:(?<LinkEnd>>[\s\S]*?)(?=%%\d+|$))
// %%(?<LinkID>\d+)%% Match a number surrounded by %% and put the number in a group named LinkID
// (?<LinkStart><a[\s\S]*?) Match <a followed by any characters until next match (non greedy), in a group named LinkStart
// (?: Logical grouping that does not get captured
// (?<LinkEnd>>[\s\S]*?) Match > followed by any characters until next match, in a group named LinkEnd
// (?=%%\d+%%|$) Where the former LinkEnd group is followed by another instance of a delimited number or the end of the string. (I don't think this is working as I intended.)
也許可以使用幾個正則表達式操作和String.Format的組合。我在正則表達式方面並不擅長,所以請稍微貶低你的答案。
我從一些是不讀的問題的upvotes越來越感。我不解析HTML。字符串包含HTML的事實是微不足道的。我可以編輯OP並刪除HTML的所有痕跡,並以相同的問題結束。你是不是更想說一個正則表達式不應該被用來解析一個字符串?那可能。我列出了正則表達式的原因,這是我嘗試過的路線,但我願意接受它可能不是正確的方法。話雖如此,我仍在尋找解決這個問題的方法,而不是不該做什麼。我沒有處理有效的XML字符串,所以XML解析器不起作用。 – xr280xr
我從標題中刪除了「正則表達式」,以免扼殺創意。感謝您的輸入。 – xr280xr
我想說的正則表達式不應該用來解析一個字符串?不,這就是它的目的。爲了清楚起見,我不只是告訴你不要這麼做,我還向您指出了HTML Agility Pack,它旨在幫助您解析HTML(甚至格式錯誤的HTML)和NOT XML,正如您似乎在暗示的那樣。如果這不適合你,那麼我會推薦標準的字符串方法。無論如何,正則表達式是我試圖解決這個問題的最後一種方法。 –