我是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();
}
}
}
答案 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}";