正则表达式不起作用

时间:2013-12-05 03:30:45

标签: c# regex

我是C#的新手,所以请不要介意一些基本的错误。 我试图在字符串中搜索2个字符和大约4个数字的模式。 在第一种情况下,它找到字符串“UM2345678”,但是当我在更长的字符串中有相同的字符串时,它找不到相同的字符串“UM2345678”。有什么想法吗?

另外,如果我想搜索特定的UM和任何4个数字那么模式是什么?

感谢。

 namespace StringSearch
 {
class TestRegularExpressionValidation
{
    static void Main()
    {
        string[] numbers = 
    {
        "123-555-0190", 
        "444-234-22450", 
        "690-555-0178", 
        "146-893-232",
        "146-555-0122",
        "4007-555-0111", 
        "407-55-0111",
        "a1b-Cd-EfgH",
        "a1b-Cd-Efgn",
        "UM2345678",
        "11/12/2013 4:10:06 PM                                 UM2345678",
        "407-2-5555", 
    };
        string sPattern = "^[A-Za-z]{2}[0-9]{4}";


        foreach (string s in numbers)
        {
            System.Console.Write("{0,14}", s);
            Match m = Regex.Match(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
            if (m.Success)
            {
                System.Console.WriteLine(" - valid");
            }
            else
            {
                System.Console.WriteLine(" - invalid");
            }


        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
  }
}

5 个答案:

答案 0 :(得分:2)

我猜你所说的“更长的字符串”是这一行: “11/12/2013 4:10:06 PM UM2345678”

你的正则表达式与之匹配的原因是因为'^'字符。这是一个元字符,表示“在一行开头匹配”。如果从正则表达式中删除它,那么它应该匹配上面的字符串。

关于第二个问题,请将[a-zA-Z]更改为UM。

在.NET中测试正则表达式的一个有用的工具是Expresso,找到here

答案 1 :(得分:0)

将此用于任何输入(找到2个字母后跟4位数字):

[a-zA-Z]{2}\d{4}

这适用于您的特殊情况:

UM\d{4}

答案 2 :(得分:0)

你的正则表达式模式在开头有^,这意味着你正在从字符串的开头寻找模式。尝试更改您的模式,如下所示......

[A-Za-z]{2}[0-9]{4}

祝你好运!

答案 3 :(得分:0)

添加逗号:

^[A-Za-z]{2}[0-9]{4,}

这意味着4个或更多数字。

答案 4 :(得分:0)

  

我正在尝试搜索一个包含2个字符和大约4个数字的模式   字符串。在第一种情况下,它找到字符串“UM2345678”,但是当我   在较长的字符串中具有相同的字符串,它找不到相同的字符串   “UM2345678”。有什么想法吗?

删除“^”。这意味着以下模式位于字符串的开头。

string sPattern = "[A-Za-z]{2}[0-9]{4,}";
  

此外,如果我想搜索特定的UM和任何4个号码   这种模式会是什么?

试试这个:

string sPattern = @"UM\d{4}";