【问题标题】:How to make regular expression to check if a particular string exist in a give string如何使正则表达式检查给定字符串中是否存在特定字符串
【发布时间】:2013-01-22 14:34:17
【问题描述】:

我有下面提到的字符串。

ISA*ABC**TODAY*ALEXANDER GONZALEZ~HL*CDD*DKKD*S~EB*1*AKDK**DDJKJ~AAA*Y**50*P~AAA*N**50*P~AAA*N**63*C~AAA*N**50*D~AAA*N**45*D

在上面的字符串中有段。每个段都以倾斜(〜)符号开始,我想检查是否存在出现 AAA 段的段,并且在它的第三个索引上存在数字 63。我需要一个正则表达式。我已经尝试过并想出了这个(~AAA),但是因为 我是正则表达式的新手,我不知道如何检查 63 是否出现在第三个索引上?如果有人可以帮助我将非常感激。

【问题讨论】:

  • 为什么需要正则表达式而不是(更简单的)字符串操作?
  • 我不知道你说的第三个索引是什么意思,但你可以试试 AAA。{2}63

标签: c# finite-automata automata


【解决方案1】:

我必须同意塞巴斯蒂安的评论。这可以使用简单的Split 操作来完成。

    private static bool Check(string input)
    {
        int count = 0;
        foreach (string segment in input.Split('~'))
        {
            string[] tokens = segment.Split('*');
            if (tokens[0] == "AAA")
            {
                count++;
                if (count == 3)
                {
                    if (tokens[3] == "63") return true;
                    else return false;
                }
            }
        }
        return false;
    }

编辑: 既然你想要更少的代码行,那么 LINQ 怎么样?

    private bool Check(string input)
    {
        return input.Split('~').Select(x => x.Split('*')).Any(x => x.Length >= 4 && x[0].Equals("AAA") && x[3].Equals("63"));
    }

编辑2: 为了完整起见,这里还有一个正则表达式解决方案:

    private bool Check(string input)
    {
        return Regex.IsMatch(input, @".*~AAA\*([^\*~]*\*){2}63.*");
    }

【讨论】:

  • 我已经像上面的 C# 代码那样做了。所以我将其标记为答案。但实际上我发布这个问题的原因是我想借助正则表达式来做到这一点。通过使用正则表达式,这10行代码可以转换为2或3行。
  • 谢谢我看到了编辑。你能告诉我这个问题有什么问题吗,因为我提出了正确的问题,但是有人对此投了反对票,因此我无法提出任何其他问题。
【解决方案2】:

manymanysites and tools 可以帮助您使用正则表达式。 Google 可以进一步帮助您。

【讨论】:

    【解决方案3】:

    你可以用这个:

    ~AAA\*[A-Z]\*\*63
    

    注意 \ 用于转义 * 并且 [A-Z] 匹配任何大写字母字符。

    【讨论】:

      【解决方案4】:
         string s = "ISA*ABC**TODAY*ALEXANDER GONZALEZ~HL*CDD*DKKD*S~EB*1*AKDK**DDJKJ~AAA*Y**50*P~AAA*N**50*P~AAA*N**63*C~AAA*N**50*D~AAA*N*   *45*D";
         string[] parts = s.Split('~');
         for (int i = 0; i < parts.Count(); i++)
         {
            MessageBox.Show("part "+i.ToString()+" contains 63: "+parts[i].Contains("63").ToString());
         }
      

      这只是一个例子。你可以做更多,我检查了任何部分中是否存在 63。
      因此,如果您确实想检查第 3 段代码是否为:

      bool segment3Contains63 = s.Slplit('~')[3].Contains("63");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-20
        • 2015-10-04
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        • 2012-11-04
        • 1970-01-01
        相关资源
        最近更新 更多