2016-04-01 193 views
1

我有一個字符串(僅數字),我想用string.Empty替換一個特定的數字。我正在使用string.Replace,但問題是它會從所有數字中替換給定的數字。我也試過Regex.Replace,但得到相同的結果。替換字符串中的數字 - C#

例如,

代碼:

string original = "301, 3301, 2301, 5301, 8301"; 
string modified = original.Replace("301", string.Empty); 
string usingRegex = Regex.Replace(original, "301", string.Empty); 

實際結果:

", 3, 2, 5, 8" 

預期結果:

"3301, 2301, 5301, 8301" 
+2

用','拆分,刪除那些你不想要的(用LINQ很容易),然後用'string.Join'把剩下的東西放回去。 – zimdanen

+4

你有一串數字?爲什麼不把它分解成一個整數數組? – Kritner

+1

將它們全部轉換爲數字並擺脫301 ..應該正常工作? – psj01

回答

1
const string original = "301, 3301, 2301, 5301, 8301, 301"; 
var lst = original.Split (',').Select(s => s.Trim()).Where(item => item != "301"); 
var replaced = string.Join(", ", lst); 

這將拆分字符串,並僅刪除那些剛好爲301的條目,並加入備份結果。這大致是tokenization的過程。

1

嘗試:

string usingRegex = Regex.Replace(original, "(^301 ,|, 301)", string.Empty); 

此相匹配的301與,結束或,結束。

0

與\ b嘗試在你的正則表達式 是這樣的:

string original = "301, 3301, 2301, 5301, 8301"; 
string modified = original.Replace("301", string.Empty); 
string usingRegex = Regex.Replace(original, @"\b301\b", string.Empty); 

讓我知道,如果這是有幫助的。

0

你可以嘗試這樣的,

string pattern = @"\b301\b"; 
string input = "301, 3301, 2301, 5301, 8301"; 
string result = Regex.Replace(input, pattern, string.Empty, RegexOptions.None).TrimStart(','); 
0

不是很漂亮,但工作並與正則表達式。 刪除(!)給定字符串中的任何數字。

string original = "301, 3301, 2301, 5301, 8301"; 
string usingRegex = Regex.Replace(original, "(, 5301)*(^5301,)*", ""); 
Console.WriteLine(original); 
Console.WriteLine(usingRegex);