2013-03-03 262 views
2

我真的使用正則表達式掙扎,似乎無法從這個字符串從字符串的正則表達式中提取數字

"id":143331539043251, 

我這個嘗試提取數...但我得到的編譯錯誤

var regex = new Regex(@""id:"\d+,"); 

請注意,完整的字符串包含我不想要的其他數字。我想ID之間的數字:結束和,

+1

這個字符串從哪裏來的?它看起來可能是[JSON]的一部分(http://en.wikipedia.org/wiki/Json),在這種情況下,您應該使用適當的JSON解析器,而不是正則表達式。 – 2013-03-03 14:49:09

+0

它的確如此,但服務器返回格式錯誤的JSON,其中包含JSON內的JSON。我的問題很複雜,這就是我決定使用正則表達式的原因。 – 2013-03-03 14:50:55

+0

只要JSON被引用屬性,就允許JSON包含JSON;你只需要再次解析內部件。 – 2013-03-03 14:51:53

回答

3

如果你需要的是數字,只是匹配的是:

[0-9]+ 

請注意,我沒有使用\d因爲這將匹配任何位(如阿拉伯數字)在.NET正則表達式引擎中。


更新,下面就這個問題,並在此答案的評論 - 以下的正則表達式匹配的格式,並將匹配的號碼捕獲組:

@"""id"":([0-9]+)," 

用作:

Regex.Match(@"""id"":143331539043251,", @"""id"":([0-9]+),").Groups[1].Value 

其中返回143331539043251

+0

是的,但整個字符串包含我不想要的其他數字。我需要它在id之間抓取數字:和結尾, – 2013-03-03 14:49:40

+0

@JamesJeffery - 這是一個相當重要的細節。你想在問題中提到的東西。爲什麼不編輯它,並做到這一點? – Oded 2013-03-03 14:55:59

3

嘗試此代碼:

var match = Regex.Match(input, @"\""id\"":(?<num>\d+)"); 
var yourNumber = match.Groups["num"].Value; 

然後使用提取的數yourNumber作爲字符串或它解析到號碼類型。

2

如果你是開放的使用LINQ嘗試以下方法(C#):

串stringVariable = 「123cccccbb --- 556876 --- ==」;

var f =(from a in stringVariable.ToCharArray()where Char.IsDigit(a)== true select a);

var number = String.Join(「」,f);