C# 正则表达式第一个数字出现

C# 正则表达式第一个数字出现,c#,regex,regex-group,C#,Regex,Regex Group,我的任务是提取以下字符串中的第一个数字: GLB=VSCA|34|speed|1| 我的模式如下: (?x:VSCA(\|){1}(\d.)) 基本上我需要提取34,VSCA之后出现的第一个数字。根据我的模式,我得到了一个组,但可能只得到数字?这是我的c代码片段: string regex = @"(?x:VSCA(\|){1}(\d.))"; Regex rx = new Regex(regex); string s = "GLB=VSCA|34|speed|1|"; if (rx.Ma

我的任务是提取以下字符串中的第一个数字:

GLB=VSCA|34|speed|1|
我的模式如下:

(?x:VSCA(\|){1}(\d.))
基本上我需要提取34,VSCA之后出现的第一个数字。根据我的模式,我得到了一个组,但可能只得到数字?这是我的c代码片段:

string regex = @"(?x:VSCA(\|){1}(\d.))";
Regex rx = new Regex(regex);
string s = "GLB=VSCA|34|speed|1|";

if (rx.Match(s).Success)
{
    var test = rx.Match(s).Groups[1].ToString();
}

此正则表达式模式:?您可以使用正向查找来匹配VSCA后的34个第一位数?您不需要正则表达式,只需在“|”字符上拆分即可:

string s = "GLB=VSCA|34|speed|1|";

string[] parts = s.Split('|');

if(parts.Length >= 2)
{
    Console.WriteLine(parts[1]); //prints 34
}
这里的好处是,您可以基于索引访问原始字符串的所有部分:

[0] - "GLB=VSCA"
[1] - "34"
[2] - "speed"
[3] - "1"

当其他答案非常有效时,如果你真的必须使用正则表达式,或者想知道如何直接得到它,你可以使用一个命名的组作为数字。考虑下面的代码:

string regex = @"(?x:VSCA(\|){1}(?<number>\d.?))";
Regex rx = new Regex(regex);
string s = "GLB:VSCA|34|speed|1|";

var match = rx.Match(s); 
if(match.Success) Console.WriteLine(match.Groups["number"]);

怎么样?如果字符串总是那样的格式,为什么不直接拆分为|并取1索引呢?我在发布我的答案时还没有看到你的答案。谢谢你把答案打出来,忘了提交。我比你投的票高