【问题标题】:how to match a string constructed by given sub strings by regular expression in C#如何通过C#中的正则表达式匹配由给定子字符串构造的字符串
【发布时间】:2012-03-24 07:03:45
【问题描述】:

我应该怎么做才能通过c#中的正则表达式匹配由子字符串“CC”“LC”“SW”“RP”“WP”“DT”“LO”“CR”“RC”构造的字符串。例如: 输入字符串为 "D:(A;;CCLCRPRC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU) (A;;CCLCRPWPRC;;;SY) (A;;KA;;;BA)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)"*以及如何匹配子串* (A;;CCLCRPRC;;;AU) 在里面。

谢谢,问候

【问题讨论】:

    标签: c# regex substring match


    【解决方案1】:

    您没有指定关于 2 个字符子字符串(As 和分号)周围的文本的任何内容,因此为了灵活起见,这里有一个正则表达式,它提取所有被括号包围的字符串,以任何开头,以任何结尾任何内容,并且包含您指定的一个或多个子字符串:

    var resultList = new List<string>();
    Regex regexObj = new Regex(@"(\(.*?(CC|LC|SW|RP|WP|DT|LO|CR|RC)+.*?\))", RegexOptions.Multiline);
    Match matchResult = regexObj.Match(subjectString);
    while (matchResult.Success) 
    {
        resultList.Add(matchResult.Value);
        matchResult = matchResult.NextMatch();
    } 
    

    在上面的示例中运行时,会提取以下内容:

    (A;;CCLCRPRC;;;AU)
    (A;;CCLCRPRC;;;IU)
    (A;;CCLCRPRC;;;SU)
    (A;;CCLCRPWPRC;;;SY)
    

    【讨论】:

    • 谢谢。它工作正常,但这也会拉出 (A;;CCCCLCRPRC;;;AU) 之类的字符串(CC 出现两次)。
    • 那么每个子串最多只能出现一次?
    【解决方案2】:

    如果你想匹配精确的字符串,你可以简单地使用String.IndexOf 方法。

    【讨论】:

      【解决方案3】:

      或者你可以使用 String.Contains 方法来判断一个字符串是否是主字符串的一部分

      【讨论】:

        猜你喜欢
        • 2011-11-08
        • 2023-02-04
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        • 2012-11-10
        • 1970-01-01
        • 2022-07-11
        • 1970-01-01
        相关资源
        最近更新 更多