焦炭

2010-09-13 101 views
0

如何改變焦炭

[email protected]到XXX_YYY_ZZZ我知道

一種方法是使用與string.replace(炭,炭)方法,

但我要替換「@」&「。」上述方法只替換一個字符。

更多的情況是什麼,如果我有[email protected] ...

我還是想輸出看起來像XX.X_YYY_ZZZ

這可能嗎?任何建議感謝

回答

8

所以,如果我理解正確的話,你要替換@_,和._,但只有當.@後?如果有一個保證@(假設你正在處理的電子郵件地址):

string e = "[email protected]"; 
e = e.Substring(0, e.IndexOf('@')) + "_" + e.Substring(e.IndexOf('@')+1).Replace('.', '_'); 
+0

+1,解決了這個問題,並且簡單而快速地完成了。 – Bloodyaugust 2010-09-13 21:09:07

+0

正確的更快的方法..謝謝 – user175084 2010-09-13 21:18:37

3
+0

給予好評:相同的答案我的,但更好地記錄(以及faster-回覆:) – mikemanne 2010-09-13 21:01:39

+3

我很想看到符合OP需求的正則表達式(即,除了在''之前*。*之前'替換'@和'。)。 – kbrimington 2010-09-13 21:07:35

+1

@kbrimington看到我的解決方案這樣的正則表達式:http://stackoverflow.com/questions/3704345/replace-char-in-a-string/3704464#3704464 – 2010-09-13 21:25:53

0

可以代替鏈

var newstring = "[email protected]".Replace("@","_").Replace(".","_"); 
+1

這不適用於[email protected]。 「我仍然希望輸出看起來像XX.X_YYY_ZZZ」OP說。 – Zafer 2010-09-13 21:06:24

+0

這工作,但我的問題是爲上述輸入我得到XX_X_YYY_ZZZ而我想要的是XX.X_YYY_ZZZ – user175084 2010-09-13 21:10:01

+0

@ user175084啊,抱歉沒有注意到,你需要第一段時間留下來? – Pharabus 2010-09-13 21:12:56

3

您可以使用下面的擴展方法做你的更換不會產生太大很多臨時字符串(如Substring和Replace所發生的)或者產生正則表達式開銷。它跳到@符號,然後遍歷剩餘的字符來執行替換。

public static string CustomReplace(this string s) 
{ 
    var sb = new StringBuilder(s); 
    for (int i = Math.Max(0, s.IndexOf('@')); i < sb.Length; i++) 
     if (sb[i] == '@' || sb[i] == '.') 
      sb[i] = '_'; 
    return sb.ToString(); 
} 
+0

+1爲[email protected]。ZZZ – Zafer 2010-09-13 21:06:40

+0

這個作品很完美..謝謝 – user175084 2010-09-13 21:15:44

0

創建一個數組,其中包含要替換的字符,循環訪問數組並執行基於索引的替換。

4

下面是一個完整的正則表達式的解決方案,涵蓋了您的案件。第二種情況的關鍵是在@符號之後通過使用積極的後視來匹配點。

string[] inputs = { "[email protected]", "[email protected]" }; 
string pattern = @"@|(?<[email protected]*?)\."; 

foreach (var input in inputs) 
{ 
    string result = Regex.Replace(input, pattern, "_"); 
    Console.WriteLine("Original: " + input); 
    Console.WriteLine("Modified: " + result); 
    Console.WriteLine(); 
} 

雖然這是很簡單的一對夫婦的字符串Replace調用來完成。效率是你需要測試的東西,取決於文本的大小和代碼的替換次數。

+0

+1:很好地完成。我以前沒見過'(??)'語法。你能推薦一個我可以閱讀的資源嗎? – kbrimington 2010-09-13 21:37:09

+0

@kbrimington謝謝!您可以在[30分鐘正則表達式教程](http://www.codeproject.com/KB/dotnet/regextutorial.aspx)中找到一些正面/負面查找的好例子(見例子22-30)。另請參閱Regular-Expressions.info的環視網頁:[Page1](http://www.regular-expressions.info/lookaround.html)和[Page2](http://www.regular-expressions.info/lookaround2的.html)。 – 2010-09-13 21:47:58

0

假設數據格式是這樣[email protected],這裏是String.Split(字符分隔符)另一種選擇:

string[] tmp = "[email protected]".Split('@'); 
string newstr = tmp[0] + "_" + tmp[1].Replace(".", "_");