如果以特定字符串

时间:2015-11-27 17:46:21

标签: c# asp.net regex

我正在尝试使用正则表达式从字符串返回一个值,如果它像“P0000000S”那样开始,但是如果没有则返回另一个。

例如:

我有这个字符串

  

P0000000S521500500015 1TZ003B 3090942 04260

     

结果:3090942

因为这从P0000000S开始,它应该返回这个结果:3090942

但是这个

  

P3417677S521500500015 1TZ003B 3090942 04260

     

结果:3419677

应该返回第一个P之间的数字,直到S:3417677

在阅读和调查之后,我想出了这个正则表达式:

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

根据我测试它的网站

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

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

感谢。

2 个答案:

答案 0 :(得分:0)

如果第一个没有匹配,只需使用两个不同的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;
}

答案 1 :(得分:0)

使用两种不同的条件和外观:

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

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