2013-06-06 84 views
0

我想從字符串中刪除名稱。我讀過這麼多關於它的文章。他們建議維護一個數組列表以將所有名稱維護爲項目。有沒有任何方法可以在不維護數組的情況下刪除名稱。 我有一個字符串作爲根據文本從字符串中刪除一些單詞

string stVal="Naresh Jadapalli\r\nChandra shekhar ponnam\r\nBalu midhun gonu guntla"; 

現在我想從字符串中刪除名稱\r\nbalu midhun gonu guntla。 謝謝。

+0

現在您有在'\ r \ N'麻煩找好樣本。請仔細檢查它是\ r \ n'還是\ n \ r'。 – NeverHopeless

+0

sry .. thats \ r \ n ..我現在編輯過..當我使用stVal = stVal.Replace(「\ r \ n \ r \ n」,「\ r \ n」); ..運行良好。但是第一次也是最後一次\ r \ n不會取代.. –

+0

好吧,請嘗試我已編輯的答案。我在評論中早些時候提到了這一點。 – NeverHopeless

回答

1

您也可以嘗試這種模式:

(?i)Balu midhun gonu guntla(\r\n)*|(\r\n)+Balu midhun gonu guntla(\r\n)*$ 

見的例子:

string pattern = "(?i)Balu midhun gonu guntla(\r\n)*|(\r\n)+Balu midhun gonu guntla(\r\n)*$"; 

    string stVal = "Balu midhun gonu guntla\r\n\r\nNaresh Jadapalli\r\nNaresh Jadapalli"; 
    string res1 = Regex.Replace(stVal, pattern, ""); 

    stVal = "Naresh Jadapalli\r\n\r\nBalu midhun gonu guntla\r\n\r\nChandra shekhar ponnam\r\n\r\nBalu midhun gonu guntla\r\n\r\n"; 
    string res2 = Regex.Replace(stVal, pattern, ""); 

    stVal = "Naresh Jadapalli\r\n\r\nChandra shekhar ponnam\r\nChandra shekhar ponnam\r\n\r\nBalu midhun gonu guntla\r\n\r\n"; 
    string res3 = Regex.Replace(stVal, pattern, ""); 
+0

根據stVal = stVal.Replace(「\ r \ nBalu midhun gonu guntla」,「」);第一名不會有\ r \ n。噓它不會取代第一個名字 –

+0

檢查我的第二個解決方案。 – NeverHopeless

+0

你的第二個正則表達式正在刪除1st \ r \ n ..不能刪除最後\ r \ n –

4

假設,即​​是一個錯字,它應該是:

var strToRemove = "Balu midhun gonu guntla"; 

那麼代碼看起來是這樣的:

stVal.Remove(stVal.IndexOf(strToRemove), strToRemove.Length); 

如果它不是一個錯字,那就用另一個IndexOf過載:

stVal.Remove(stVal.IndexOf(strToRemove, StringComparison.CurrentCultureIgnoreCase), strToRemove.Length); 
+0

'stVal = stVal如何?替換(「\ n \ rBalu midhun gonu guntla」,「」)'? – unlimit

+0

@unlimit:漠不關心。解決相同任務的另一種方法,目前尚不清楚。我的意思是,OP是否想刪除單個事件或所有事件? – Dennis

+0

如果輸入字符串沒有搜索字符串,此解決方案將崩潰​​。 :)所以不要忘記檢查搜索字符串的存在。 – NeverHopeless

1

要做t他的正確,你必須說明分隔符。

如果您不這樣做,那麼如果您要替換的名稱作爲列表中另一個名稱的子字符串出現,則會出現錯誤。

例如,想象一下,如果你更換「馬太福音」這個字符串中:

"Matthew Smith\r\nMatthew\r\nMatthew Watson" 

想必你只想要替換爲「\ r \ nMatthew \ r \ n」,中間給:

"Matthew Smith\r\nMatthew Watson" 

但如果你忽略了分隔符,你會得到這樣的:

" Smith\r\nMatthew\r\nMatthew Watson" 

下實現方法具d將刪除的第一個匹配,正確地分配分隔符。請注意,它也必須處理字符串開頭和結尾處的特殊情況,因爲在開始或結尾沒有分隔符。

/// <summary>This removes the first occurrence of the specified target string in the given text.</summary> 
/// <param name="text">The text from which to remove the target string.</param> 
/// <param name="target">The target string to remove.</param> 
/// <param name="delimiter">The delimiter string used between potential target strings.</param> 
/// <returns>The text with first occurrence (if any) of the target string removed.</returns> 

public static string RemoveFirstMatch(string text, string target, string delimiter) 
{ 
    if (text == null) 
     throw new ArgumentNullException("text"); 

    if (target == null) 
     throw new ArgumentNullException("target"); 

    if (text.StartsWith(target + delimiter)) 
     return text.Substring(target.Length + delimiter.Length); 

    if (text.EndsWith(delimiter + target)) 
     return text.Substring(0, text.Length - target.Length - delimiter.Length); 

    return text.Replace(delimiter + target + delimiter, delimiter); 
} 

樣品測試代碼:

string stVal="aaaa\r\naaab\r\naaab\r\naaac"; 
string delimiter = "\r\n"; 

Console.WriteLine(RemoveFirstMatch(stVal, "aaaa", delimiter) + "\n-------------"); 
Console.WriteLine(RemoveFirstMatch(stVal, "aaab", delimiter) + "\n-------------"); 
Console.WriteLine(RemoveFirstMatch(stVal, "aaac", delimiter) + "\n-------------"); 
+0

謝謝你爲stVal = stVal.Replace(「\ n \ r \ n \ r」,「\ n \ r」); –

+0

問題首先和最後\ r \ n ..你能幫助我嗎.. –

+0

@NareshJadapalli是的,肯定有一些問題與天真的方法。我會在幾分鐘內更新我的帖子。 –

0

簡單的解決方案,這對使用正則表達式查找被請求的發生並代之以智慧^ h需要的話

你可以在C# RegEx Match