我一直在寻找一段时间来弄清楚如何确认字符串以数字开头。我遇到了一个正则表达式'/ ^ \ d /',我可以确认如果以数字开头。但是我似乎无法在下面的代码中使用它。我在if(Regex.Match(info,"/^\d/"))
声明中哪里出错?
//String attachbody is the attachment body from an email C read into a string
string[] data = Regex.Split(attachbody, "\n");
foreach (String info in data)
{
if (Regex.Match(info,"/^\d/"))
{
string[] tabbedHeaderData = Regex.Split(info, "\t");
TicketID = tabbedHeaderData[0].ToString();
Status = tabbedHeaderData[1].ToString();
URL = tabbedHeaderData[2].ToString();
InitCats = tabbedHeaderData[3].ToString();
PostRevCats = tabbedHeaderData[4].ToString();
ListNumClosed = tabbedHeaderData[5].ToString();
Console.WriteLine(TicketID);
Console.WriteLine(Status);
Console.WriteLine(URL);
Console.WriteLine(InitCats);
Console.WriteLine(PostRevCats);
Console.WriteLine(ListNumClosed);
Console.ReadLine();
}
}
示例数据(制表符分隔):
TicketID状态URL InitCats PostRevCats ListNumClosed
555555已关闭http://5555555.com/searcho个恶意网站55555
答案 0 :(得分:48)
你的正则表达式错了。 /.../
是用于定义正则表达式的javascript约定。在C#中尝试这样:
if (Regex.IsMatch(info, @"^\d"))
另请注意,您应该使用返回布尔值的IsMatch方法,否则您的代码甚至无法编译。
如果你想匹配字符串以一个或多个数字开头:
if (Regex.IsMatch(info, @"^\d+"))
答案 1 :(得分:28)
你不需要正则表达式。尝试
if (info.Length > 0 && char.IsDigit(info[0]))
{
...
}
如果您想使用正则表达式,请取出//
,这样只有Regex.IsMatch(info,@"^\d")
。
答案 2 :(得分:4)
这是您提供给Regex.Match的字符串格式。
正确的格式是:
Regex.Match(info,@"^\d")
@表示转义字符(如反斜杠)被视为普通字符。没有它,你的正则表达式需要"^\\d"
。
答案 3 :(得分:1)
你的正则表达式错了。 .Net不使用perl风格的正则表达式。正确的表达式是@“^ \ d”。
如果你不打算使用.Match中的MatchCollection做任何事情,你应该使用Regex.IsMatch(...):
RegEx.IsMatch(info, @"^\d")
答案 4 :(得分:0)
如果您只是试图找出字符串是否以数字开头。 像上面一样,你可以使用正则表达式。 只需使用Substring,删除第一个字符并测试它是否为数字。
现在,如果您尝试删除整个数字,那么我会将字符串转换为char数组,并测试字符。
伪 string s =“” 每个c in chars { 如果c是数字那么 s + = c 其他 退出 } 将s转换为整数,你在字符串的开头得到了数字。
答案 5 :(得分:0)
如果您不想使用正则表达式(某些inteview问题平台不允许正则表达式)和Char.IsDigit(info[0])
,
您可以使用if(info[0] => 0 && info[9] <= 9)
检查char是否为数字。
取决于要求,如果您不希望将'.'
视为数字(例如,仅用于整数值),请勿使用Char.IsDigit(info[0])
,因为此函数为true
返回'.'