簡體   English   中英

正則表達式的第一個數字出現

[英]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 (?<=VSCA\\D*)來匹配34VSCA之后的第一位數字(?<=VSCA\\D*)以斷言左側的內容是VSCA然后是零或不是數字\\D* ,然后匹配一個或更多數字\\d+

(?<=VSCA\\D*)\\d+

如果您需要將管道放在VSCA之后,則可以將其包括在VSCA

(?<=VSCA\\|)\\d+

演示

此正則表達式模式: (?<=VSCA\\|)\\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"

在這里擺弄

盡管其他答案確實非常有效,但是如果您確實必須使用正則表達式,或者對知道如何立即使用正則表達式感興趣,則可以為該數字使用命名組。 考慮以下代碼:

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]+怎么樣?

在這里嘗試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM