正则表达式。匹配单词直到包含空格和线条的图案

时间:2011-11-04 08:55:27

标签: regex

我有一个这样的文字行:

SOMENAME(KEYONE(任何字符) - KEYTWO(由数字组成) - KEYTHREE - KEYFOUR) - KEYFIVE


我需要一个正则表达式来提取密钥。钥匙之间的分隔符是“ spaceLineSpace ”。
我得到了这个工作的一切exept KEYONE。问题是KEYONE可以包含任何一个 空格或线条(不是两个同时)像这样:

  • SOMENAME(KEY-ONE - KEYTWO - KEYTHREE - KEYFOUR) - KEYFIVE
  • SOMENAME(KEY ONE - KEYTWO - KEYTHREE - KEYFOUR) - KEYFIVE

问题是第一个关键,我到目前为止尝试了这两个表达式:

  • '^(\\秒 - \\ S] +` 适用于字符和数字,但如果KEYONE包含空格或行,则会中断。
  •  `(a-z0-9] +`这适用于数字和空格,但如果KEYONE只是数字则会中断。

如果我无法完成这项工作,我将改为使用stringsplit。

感谢所有帮助! :)

完整代码:

     Regex emailregex = new Regex("(?<DOCCLASS>[^( - $ ]+) - (?<DOCNO>[^ - ]+) - (?<DOCSHEET>[^\\s-\\s]+) - (?<DOCREV>[^\\s-\\s)]+)");
        string title = "MY%20TITLE.DOCM%20(10 003%20-%201202827%20-%201%20-%20A2)%20-%201";

        String decodedTitle = Uri.UnescapeDataString(title);// //Server.UrlDecode(documentSharepointTitle);




        Match m = emailregex.Match(decodedTitle);
        if (m.Success)
        {
            Console.WriteLine("DOC_CLASS: " + m.Groups["DOCCLASS"].Value);
            Console.WriteLine("DOC_NO: " + m.Groups["DOCNO"].Value);
            Console.WriteLine("DOC_SHEET: " + m.Groups["DOCSHEET"].Value);
            Console.WriteLine("DOC_REV: " + m.Groups["DOCREV"].Value);
            Console.WriteLine("DOC_TYPE: " + m.Groups["DOCTYPE"].Value);
        }
        else
        {
            Console.WriteLine(decodedTitle + " , does not match document title pattern.");
        }
        Console.WriteLine();
        System.Console.WriteLine("Press Enter to Continue...");
        System.Console.ReadLine();

1 个答案:

答案 0 :(得分:0)

试试这个:

^\w+\s\(([\w\s-]+)\s-\s(\d+)\s-\s(\w+)\s-\s(\w+)\)\s-\s(\w+)$

顺便说一句......如果你提供一些例子会更容易。我不打算自己创造它们,所以如果它按预期工作,我就不能真正检查它。