如果以特定字符串开头,Regex将返回不同的部分

本文关键字:返回 Regex 字符串 开头 如果 | 更新日期: 2023-09-27 18:24:42

如果字符串的开头像";P0000000S";但如果没有,则返回另一个。

例如:

我有这个字符串

P0000000S521500500015 1TZ003B 3090942 04260

结果:3090942

由于从P0000000S开始,它应该返回此结果:3090942

但是这个

P3417677S521500500015 1TZ003B 3090942 04260

结果:3419677

应返回第一个p到S:34177677 之间的数字

经过阅读和调查,我想出了这个Regex:

(?(?=^P0000000S)^.{29}'s('w+)'s.{5}$|^P('d+).{35})

根据我测试的这个网站,它正在工作

https://regex101.com/r/aH1vG7/1

好吧,我正试图在我正在创建的C#APS.NET网站上使用它,但它不起作用,我需要澄清的是,我需要在Regex上执行IF-THEN-ELSE逻辑,因为这是许多其他验证器之一的验证器,而所有其他验证器都在起作用。如果有任何帮助的话,我将其与Regex.Match函数一起使用,然后循环生成的组。

谢谢。

如果以特定字符串开头,Regex将返回不同的部分

使用两种不同的查找条件:

var regex = new Regex(@"(?<=P0000000S'w+'s'w+'s)'w+|(?<=P)'d+(?=S)");

您只需要过滤结果不是0000000。

只需使用两个不同的regexen,如果第一个不匹配,则失败。

static string PartImInterestedIn(string input)
{
    Match match;
    match = Regex.Match(input, @"(?=^P0000000S)'S+ 'S+ ('S+)");
    if (!match.Success)
    {
        match = Regex.Match(input, @"^P('d+)S");
    }
    return match.Groups[1].Value;
}