2013-05-19 64 views
0

我有一個字符串(它的值的一個例子是{"id":"123241077871_4423423423414"}),我只需要帶有數字和下劃線的部分。但是,我的方法與String.Replace方法不起作用。誰能幫我?字符串替換不工作

這是我已經試過:

Settings.Default["lastid"].ToString().Replace('{"id":"'+"}',null); 
+6

嗯,這是無效的C#下手,所以你應該得到一個編譯時錯誤......這不是一個有效的字符串文字。我建議避免直接字符串操作 - 只是將其解析爲JSON並使用解析的值。 –

+2

爲了將來的參考,你的問題應該擴展到某些東西不起作用的方式。錯誤的結果?編譯器錯誤?運行時錯誤?等等。 – Chris

回答

1

你的代碼應該是

Settings.Default["lastid"].ToString().Replace("{\"id\":\"", "").Replace("\"}",""); 

正如喬恩斯基特說,目前,它不是一個有效的字符串文字。另外,替換隻搜索一個文本字符串。你不能一次完成他們兩個。

+0

工作完美,非常感謝 – Federal09

+1

這是一個相當激烈的方式指出一個額外的分號。固定。 –

+0

不需要在這裏喊。 – Steve

0

你的代碼改成這樣:

Settings.Default["lastid"].ToString().Replace("{\"id\":",""); 
Settings.Default["lastid"].ToString().Replace("\"}\"",""); 
+0

您的代碼不會刪除123241077871_4423423423414周圍的開盤和收盤報價。 –

0

只需在一次通過與正則表達式

string test = Settings.Default["lastid"].ToString(); 
string result = Regex.Replace(test, @"[^0-9_]", @""); 
Console.WriteLine(result); 

正則表達式模式是指:

  • 括號
  • 並用一個空字符串代替它內部匹配不包括在內(^)任何字符。

如在下面的評論注意到@newStackExchangeInstance,模式[^0-9_]可以在[^\d_]被改變,以保持排除更換還有其他Unicode Numerical Characters

+0

改爲使用'[^ ​​\ d_]'。這更好,因爲這意味着如果他得到一些unicode數字字符,它們仍算作數字並且不會被替換。 –

+0

@newStackExchangeInstance對不起,我不知道這一點。你能指點我一個例子嗎? – Steve

+0

http://stackoverflow.com/questions/6479423/does-d-in-regex-mean-a-digit看看最上面的答案。 (旁註:我知道它說python,但它也適用於C#) –

0

嘗試使用正則表達式。

string json = @"{""id"":""123241077871_4423423423414""}" //or whatever your value is 
Regex.Match(json, @"{""id"":""(\d+_\d+)""}".Groups[1] //will give you your result 
1

如何使用real json parser和做正確的方式

var id = JsonConvert.DeserializeAnonymousType(s, new { id = "" }).id;