C # строка начинается с регулярного числа - PullRequest
16 голосов
/ 16 июня 2011

Я некоторое время искал, чтобы выяснить, как подтвердить, что строка начинается с цифры. Я столкнулся с регулярным выражением «/ ^ \ 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();
    }
}

пример данных (с разделителями табуляции):
URL-адрес статуса TicketID InitCats PostRevCats ListNumClosed 555555 Закрыто http://5555555.com/searcho Вредоносные сайты 55555

Ответы [ 5 ]

48 голосов
/ 16 июня 2011

Ваше регулярное выражение неверно. /.../ - соглашение javascript для определения регулярных выражений. Попробуйте вот так в C #:

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

Также обратите внимание, что вам следует использовать метод IsMatch , который возвращает логическое значение, иначе ваш код даже не скомпилируется.

И если вы хотите сопоставить, строка начинается с одной или нескольких цифр:

if (Regex.IsMatch(info, @"^\d+"))
28 голосов
/ 16 июня 2011

Вам не нужно регулярное выражение для этого.Попробуйте

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

Если вы хотите использовать регулярное выражение, уберите //, так что это просто Regex.IsMatch(info,@"^\d").

4 голосов
/ 16 июня 2011

Это формат строки, которую вы указали в Regex.Match.

Правильный формат:

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

@ означает, что экранирующие символы (например, обратныекосая черта) рассматриваются как обычные символы.Без него ваше регулярное выражение должно было бы быть "^\\d".

1 голос
/ 16 июня 2011

Ваше регулярное выражение неверно..Net не использует регулярные выражения в стиле Perl.Правильное выражение: @ "^ \ d".

И вы должны использовать Regex.IsMatch (...), если вы не собираетесь использовать MatchCollection из .Match для чего-либо:

RegEx.IsMatch(info, @"^\d")
0 голосов
/ 16 июня 2011

Если вы только пытаетесь выяснить, начинается ли строка с цифры.Как и выше, вы можете пропустить с помощью регулярных выражений.Просто используйте Подстроку, удалите первый символ и проверьте, является ли это число.

Теперь, если вы пытаетесь удалить все число, я бы преобразовал строку в массив символов и протестировал символы.

псевдострока s = "" для каждого c в символах {если c - число, тогда s + = c, иначе выход для} преобразовать s в целое число, вы получите число в начале строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...