2013-05-22 191 views
0

我正在使用正則表達式,但其工作正常。 我的要求是我有一個字符串值,它有這樣的'##Anything##'標籤。 我想用ASP的控制用HTML標記替換字符串

##name##替換此##Anything##捐贈一texbox ##Field##捐贈組合框 等

+1

您想在運行時在網頁上創建文本框,還是在創作過程中創建網頁? –

+0

我想在運行時創建一個asp控件,同時解析字符串。 –

回答

1

可以使用String.Replace()方法做到這一點:

//Example Html content 
string html ="<html> <body> ##Name## </body> </html>"; 

//replace all the tags for AspTextbox as store the result Html 
string ResultHtml = html.Replace("##Name##","<asp:Textbox id=\"txt\" Text=\"MyText\" />"); 
+0

不,但它有不同的字符串以及像## Anything ## –

+0

您的標記##任何##創建一個文本框包含任何文本?我真的不明白你需要 –

+0

我編輯的問題再次看到 ##文本##意味着它的文本框 ##值##意味着它的下拉 ##什麼##等我有用戶預定義的文本插入一個富文本框 –

0

再次,最好的提示是使用string.Replace(),也許與string.Substring()結合使用。

2

String.Replace方法應該可以正常工作,並且可能是最適合您的解決方案。但是,如果你仍然想一個正則表達式的解決方案,你可以使用這樣的事情:

private const string REGEX_TOKEN_FINDER = @"##([^\s#]+)##" 
private const int REGEX_GRP_KEY_NAME = 1; 

public static string Format(string format, Dictionary<string, string> args) { 
    return Regex.Replace(format, REGEX_TOKEN_FINDER, match => FormatMatchEvaluator(match, args)); 
} 

private static string FormatMatchEvaluator(Match m, Dictionary<string, string> lookup) { 
    string key = m.Groups[REGEX_GRP_KEY_NAME].Value; 
    if (!lookup.ContainsKey(key)) { 
     return m.Value; 
    } 
    return lookup[key]; 
} 

它適用於令牌像這樣的:##招呼##。 ##之間的值在您提供的字典中搜索,請記住字典中的搜索區分大小寫。如果在字典中找不到它,則令牌在字符串中保持不變。下面的代碼可以用來測試一下:

var d = new Dictionary<string, string>(); 
d.Add("VALUE1", "1111"); 
d.Add("VALUE2", "2222"); 
d.Add("VALUE3", "3333"); 

string testInput = "This is value1: ##VALUE1##. Here is value2: ##VALUE2##. Some fake markers here ##valueFake, here ##VALUE4## and here ####. And finally value3: ##VALUE3##?"; 

Console.WriteLine(Format(testInput, d)); 
Console.ReadKey(); 

運行它會給下面的輸出:

這是值1:1111這裏是值2:2222這裏一些假標記## valueFake,這裏## VALUE4 ##和這裏####。最後是value3:3333?