Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果以特定字符串开头,则返回不同部分的正则表达式_C#_Asp.net_Regex - Fatal编程技术网

C# 如果以特定字符串开头,则返回不同部分的正则表达式

C# 如果以特定字符串开头,则返回不同部分的正则表达式,c#,asp.net,regex,C#,Asp.net,Regex,我试图使用正则表达式从字符串返回一个值,如果它以“p000000s”开头,但如果它没有,则返回另一个值 例如: 我有这根绳子 P0000000S521500500015 1TZ003B 3090942 04260 结果:3090942 由于它以p000000s开头,因此应返回以下结果:3090942 但是这个 P3417677S521500500015 1TZ003B 3090942 04260 结果:3419677 应返回介于第一个p和S之间的数字:3417677 在阅读和调查之后,我想出了这

我试图使用正则表达式从字符串返回一个值,如果它以“p000000s”开头,但如果它没有,则返回另一个值

例如:

我有这根绳子

P0000000S521500500015 1TZ003B 3090942 04260

结果:3090942

由于它以p000000s开头,因此应返回以下结果:3090942

但是这个

P3417677S521500500015 1TZ003B 3090942 04260

结果:3419677

应返回介于第一个p和S之间的数字:3417677

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

(?(?=^P0000000S)^.{29}\s(\w+)\s.{5}$|^P(\d+).{35})
根据我测试的这个网站,它是有效的

嗯,我试图在我正在创建的一个C#APS.NET网站上使用它,但它不起作用,我需要澄清一下,我需要在正则表达式上执行IF-THEN-ELSE逻辑,因为这是许多其他验证程序之一的验证程序,所有其他验证程序都在工作。 如果有什么帮助的话,我将它与Regex.Match函数一起使用,然后循环生成的组


谢谢。

只要使用两个不同的正则表达式,如果第一个正则表达式不匹配,就可以使用

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;
}

对环视仪使用两种不同的条件:

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

var regex=new regex(@)(?对此类逻辑使用正则表达式显然是错误的作业工具(即使可能)。只需编写一个简单函数来标记输入并确定(基于规则)返回哪个部分。它将花费更少的时间编写,更具可读性,更易于维护。旁注:IF语句是多余的。因为IF first lookahead失败
(?=
然后它将在或之后用于模式。我知道使用函数更容易,但此验证用于在我工作的生产线上进行扫描,这是唯一一条有条件的生产线,所有其他生产线使用正则表达式从不同格式的字符串中提取零件号和序列号。这些正则表达式表达式放在一个数据库中,该数据库读取相应的验证字符串。正如我所提到的,我无法对C代码进行验证,因为这是一个已经在使用的系统,它使用正则表达式字符串进行验证,但问题是这是第一种情况,它们的零件号位于两个不同的可能位置,但无论如何感谢您的帮助支持。虽然我将使用另一个答案,但这对我有效,因为应用程序上已经实现的代码使用组[0]上的原始字符串来验证扫描,但我在原始问题中没有提到这一点,非常感谢