【问题标题】:Regular Expressions + Separate string with no white space正则表达式 + 没有空格的单独字符串
【发布时间】:2011-12-08 21:26:24
【问题描述】:

我试图弄清楚如何编写一个可以匹配“3Z10Z”和“3Z 10Z”的模式,然后返回“3Z”。 (稍后我将编写返回 10Z 部分的模式……)。

我尝试使用 @"\d+Z\s*\B" 之类的东西来尝试抓住第一部分,但没有骰子。如果可能的话,我的一个想法是让它从左到右阅读并返回它找到的第一个 @"\d+Z" 。为了稍后获得“10Z”部分,我需要它从右到左阅读......

非常感谢任何帮助!

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    你试过@"(\d[A-Z])\s*(.*)"吗?

    如果您运行下面的程序,您可以一次捕获前缀后缀

    基本上是一个数字后跟大写字母。

            static void Main(string[] args)
            {
                string text1 = "3Z10Z";
                string text2 = "3Z 10Z";
                string pattern = @"(\d[A-Z])\s*(.*)";
    
                Match match = Regex.Match(text1, pattern);
                if (match.Success)
                {
                    Console.WriteLine("prefix {0} suffix {1}.", 
                      match.Groups[1].Value, match.Groups[2].Value);
                }
    
                match = Regex.Match(text2, pattern);
                if (match.Success)
                {
                    Console.WriteLine("prefix {0} suffix {1}.", 
                  match.Groups[1].Value, match.Groups[2].Value);
                }
    
                Console.ReadLine();
            }
    

    【讨论】:

      【解决方案2】:

      匹配的基本正则表达式是:

      /(\d+Z)\s*?([^ ]+)/
      

      back-reference 1 包含您的 \d+Z,而 back-reference 2 包含您的第二个字符串。 (在您的示例中为 10Z)。该站点解释了特定于 C# http://www.regular-expressions.info/dotnet.html 的正则表达式。如果您在捕获/使用反向引用时需要任何帮助,请告诉我。

      【讨论】:

        【解决方案3】:

        我真的不知道你想做什么:

        大概:

         (\d+[a-zA-Z])\s*\(d+[a-zA-Z])
        

        是你的意思吗? $1 和 $2 有你的部分。

        【讨论】:

        • 是的,假设这有点令人困惑。基本上我试图分离“3Z10Z”并在一行代码中获取:1)字符串matchOne =“3Z”(使用\d + [a-zA-Z])和下一行代码2)字符串matchTwo =“ 10Z"
        猜你喜欢
        • 2017-06-28
        • 2017-10-01
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        • 2018-12-03
        • 2013-05-26
        • 2020-04-06
        • 1970-01-01
        相关资源
        最近更新 更多