[英]Regex replace string function not working as expected
我正在嘗試在Web應用程序中實現主題標簽功能,以輕松地將搜索鏈接嵌入到頁面中。 問題是我正在嘗試對哈希標記進行替換,以使它們不會出現在HTML輸出中。 由於我還希望在輸出中也包含哈希標記,因此我不能只在處理結束時對整個字符串進行最終的Replace
。 我會希望能夠逃脫,像這樣一些哈希標記\\#1 is my answer
,我會發現並更換\\#
只有#
但是這就是我甚至准備好另一個問題(但還在想)。
到目前為止,這是我在控制台應用程序中模擬的內容,
static void Main(string[] args)
{
Regex _regex = new Regex(@"(#([a-z0-9]+))");
string link = _regex.Replace("<p>this is #my hash #tag.</p>", MakeLink("$1"));
}
public static string MakeLink(string tag)
{
return string.Format("<a href=\"/Search?t={0}\">{1}</a>", tag.Replace("#", ""), tag);
}
輸出為:
<p>this is <a href="/Search?t=#my">#my</a> hash <a href="/Search?t=#tag">#tag</a>.</p>
但是,當我在運行MakeLink()
時使用斷點運行它時,它的字符串顯示在調試器輸出中的"$1"
,並且沒有按預期替換哈希。
有沒有比regex更好的工作工具? 還是我可以做些其他的事情來使它正常工作?
請注意,您要向MakeLink(而不是第一個捕獲的組)傳遞文字“ $ 1”。 因此,您的.Replace(“#”,“”)無所事事。 然后,正則表達式用第一個捕獲組替換MakeLink輸出中出現的兩次“ $ 1”。
如果您將“ $ 1”替換為“ $ 2”,那么我認為您將獲得所需的結果,只是不完全符合您的預期。
要不替換轉義的主題標簽,只需修改當前的正則表達式,使其與以轉義開頭的任何內容都不匹配:
Regex _regex = new Regex(@"[^\\](#([a-z0-9]+))");
然后應用新的正則表達式以僅查找轉義的井號並將其替換為未轉義的井號:
Regex _escape = new Regex(@"\\(#([a-z0-9]+))");
_escape.Replace(input, "$1");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.