正则表达式第一个数字出现
Regex first digits occurrence
我的任务是提取以下字符串中的第一位数字:
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\|)\d+?(?=\|)
将仅匹配数字。 (如果您的数字可以为负数/有小数位,您可能需要使用 (?<=VSCA\|).+?(?=\|)
)
您可以匹配 34
(VSCA
之后的第一个数字),使用正后视 (?<=VSCA\D*)
来断言左侧的内容是 VSCA
,然后是 VSCA
零次或多次不是数字 \D*
然后匹配一个或多个数字 \d+
:
如果您需要管道在 VSCA
之后,您可以将其包含在后视中:
你不需要正则表达式,你可以简单地拆分 '|'
字符:
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"
Fiddle here
虽然其他答案非常有效,但如果您真的必须使用正则表达式,或者有兴趣知道如何立即使用正则表达式,您可以为号码使用命名组。考虑以下代码:
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"]);
(?<=VSCA\|)[0-9]+
怎么样?
我的任务是提取以下字符串中的第一位数字:
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\|)\d+?(?=\|)
将仅匹配数字。 (如果您的数字可以为负数/有小数位,您可能需要使用 (?<=VSCA\|).+?(?=\|)
)
您可以匹配 34
(VSCA
之后的第一个数字),使用正后视 (?<=VSCA\D*)
来断言左侧的内容是 VSCA
,然后是 VSCA
零次或多次不是数字 \D*
然后匹配一个或多个数字 \d+
:
如果您需要管道在 VSCA
之后,您可以将其包含在后视中:
你不需要正则表达式,你可以简单地拆分 '|'
字符:
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"
Fiddle here
虽然其他答案非常有效,但如果您真的必须使用正则表达式,或者有兴趣知道如何立即使用正则表达式,您可以为号码使用命名组。考虑以下代码:
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"]);
(?<=VSCA\|)[0-9]+
怎么样?