2013-03-03 287 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);