2016-09-23 189 views
0

是否有任何智能和整潔的方式來推測string中的轉義字符,以使其與SendKeys使用的特定格式兼容?將字符串轉換爲SendKeys.Send()格式的字符串

起初我以爲這會工作:

line = Regex.Replace(line, @"\{{0}", "{{}"); 
line = Regex.Replace(line, @"\}{0}", "{}}"); 

但因爲它做兩次檢查這不會工作,工作,完全打亂了語法。

我該如何處理?

+0

您可以包括一些示例行,你有什麼,你想要什麼? –

+0

假設我有一個字符串'class Abc {...(){}}'。現在,'SendKeys.Send(str)'的文檔聲明像'{'或'('''這樣的密鑰需要被封裝在'{}'中以便被讀作一個轉義按鍵。'我怎麼幹淨地'解析'一個字符串,以適應這些標準? – Reynevan

回答

1

您可以使用一些佔位符而不是{},並使用這些佔位符創建格式化結果。然後最後用{}替換那些佔位符。例如:

string PrepareForSendKeys(string input) 
{ 
    var specialChars = "+^%~(){}"; 
    var c1 = "[BRACEOPEN]"; 
    var c2 = "[BRACECLOSE]"; 
    specialChars.ToList().ForEach(x => 
    { 
     input = input.Replace(x.ToString(), 
      string.Format("{0}{1}{2}", c1, x.ToString(), c2)); 
    }); 
    input = input.Replace(c1, "{"); 
    input = input.Replace(c2, "}"); 
    return input; 
} 

你也可以使用這種方式:

var input = "some string containing +^% ~ () { }"; 
MessageBox.Show(PrepareForSendKeys(input)); 

其結果將是:

some string containing {+} {^} {%} {~} {(} {)} {{} {}} 
+0

感謝您的答案!類似的東西開始形成在我的腦海中,但我不知道如何處理這個問題,再次感謝! – Reynevan

+0

不客氣:) –