2011-12-12 35 views
0

我需要一些正則表達式的幫助。 (在.Net 4和C#中)使用正則表達式在文本塊周圍放置東西

我需要突出顯示一段文本。該文本是格式化的HTML,所以我正嘗試使用正則表達式來查找塊,當我剛剛知道其中的單詞時。然後,我希望把它周圍的跨度標籤:

例如,如果我有:

Now x is y the time z for all <bold>quick</bold> brown x foxes to jump over the lazy dogs back" 

而且我要強調「的所有敏捷的棕色狐狸」

我想我的結果字符串是:

Now x is y the time z for all <span class="MyHighLight"><bold>quick</bold> brown x foxes</span> to jump over the lazy dogs back" 

棘手的部分是我需要保留原來的文本,只是把跨標籤圍繞它。

我想我會開始替換字符串中的空格,我想用*來將它轉換爲正則表達式。 全部?*快?*棕色?*狐狸

謝謝!

+0

'褐色x狐狸''x'的目的/狀態是什麼? –

回答

1
static string Yellow(this string body, string match) 
{ 
    string result = body; 
    foreach (Match m in Regex.Matches(body, match.Replace(" ", "(\\s*|(<[^>]+>)*)+")))     
     result = result.Replace(m.Value, 
      string.Concat("<span class=yellow>", m.Value, "</span>")); 
    return result; 
} 

string s = "Now x is y the time z for all <bold>quick</bold> brown foxes to jump over the lazy dogs back"; 
string m = "all quick brown foxes"; 
Console.WriteLine(s.Yellow(m)); 

在控制檯的結果是:
現在x是Y代表<跨度類時Z =黃>所有<大膽>快速< /加粗>棕色狐狸</span >跳過懶狗回

+0

謝謝 - 我喜歡這個工作的例子。我有這個基本但有時當我調用Regex.Mathes甚至Regex.Match,它不會返回,因此鎖定程序 - 不好。我正在搜索的數據太多。 – BrianK

+0

可能會發生這種情況,因爲它們是多個空格字符。你可以使用match.Replace(「[\ x0020 \ x00a0 \ x2000-200d]」來代替match.Replace(「」),並且總是使用html解碼輸入。一個失敗的例子是m =「全部 快速棕色狐狸」 。如果你的HTML解碼了它(m = HttpUtilities.HtmlDecode(m)),它的值將是「all \ x00a0quick brown fox」,所以我建議替換匹配空格它將起作用。 – 2011-12-14 08:00:28

0

我想你想要.*?而不是?*,這是無效的。所以:

all.*?quick.*?brown.*?foxes 

但是,這有一些問題 - 它們之間可能有詞語。有時,您可能想是這樣的:

all\s*(\<.+?\>)?\s*quick\s*(\<.+?\>)?\s*brown\s*(\<.+?\>)?\s*foxes 
相關問題