22

我一直在寻找一段时间以弄清楚如何确认字符串以数字开头。我遇到了一个正则表达式语句'/^\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 Closed http://5555555.com/searcho Malicious Sites 55555

4

6 回答 6

66

你的正则表达式是错误的。/.../是用于定义正则表达式的 javascript 约定。在 C# 中尝试这样:

if (Regex.IsMatch(info, @"^\d"))

另请注意,您应该使用返回布尔值的IsMatch方法,否则您的代码甚至无法编译。

如果您想匹配该字符串以一位或多位数字开头:

if (Regex.IsMatch(info, @"^\d+"))
于 2011-06-16T13:04:19.763 回答
39

您不需要正则表达式。尝试

if (info.Length > 0 && char.IsDigit(info[0]))
{
   ...
}

如果您想使用正则表达式,请//取出Regex.IsMatch(info,@"^\d").

于 2011-06-16T13:07:06.137 回答
4

它是您提供给 Regex.Match 的字符串的格式。

正确的格式是:

Regex.Match(info,@"^\d")

@ 表示转义字符(如反斜杠)被视为普通字符。没有它,您的正则表达式将需要是"^\\d".

于 2011-06-16T13:05:42.390 回答
1

你的正则表达式是错误的。.Net 不使用 perl 风格的正则表达式。正确的表达式是@"^\d"。

如果您不打算将 .Match 中的 MatchCollection 用于任何事情,则应该使用 Regex.IsMatch(...) :

RegEx.IsMatch(info, @"^\d")
于 2011-06-16T13:12:06.570 回答
0

如果您只是想找出字符串是否以数字开头。像上面一样,您可以跳过使用正则表达式。只需使用子字符串,删除第一个字符并测试它是否是数字。

现在,如果您尝试删除整个数字,那么我会将字符串转换为 char 数组,并测试这些字符。

伪字符串 s = "" for each c in chars{ if c is number then s += c else exit for } 将 s 转换为整数,得到字符串开头的数字。

于 2011-06-16T13:16:13.807 回答
0

如果您不想使用正则表达式(一些面试题平台不允许使用正则表达式)并且Char.IsDigit(info[0])

您可以使用if(info[0] => 0 && info[9] <= 9)来检查 char 是否为数字。

如果您不想考虑'.'作为数字(例如仅整数值)不使用,则取决于要求,Char.IsDigit(info[0])因为此函数返回true'.'

于 2020-02-07T08:11:19.363 回答