正则表达式+单独的字符串,没有空格

时间:2011-12-08 21:26:24

标签: c# regex

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

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

非常感谢任何帮助!

3 个答案:

答案 0 :(得分: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();
        }

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

大概:

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

你是什么意思? $ 1和$ 2有您的零件。