Строка С# начинается с числа регулярных выражений
Я искал вокруг немного, чтобы понять, как подтвердить, что строка начинается с числа. Я столкнулся с выражением regex '/^\d/', которое я могу подтвердить, если оно начинается с цифры. Однако я не могу заставить его работать в коде ниже. может ли кто-нибудь указать, где я ошибся в утверждении if (Regex.Match(info, "/^\d/" ))? Спасибо!
//String attachbody is the attachment body from an email i 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
Ответы
Ответ 1
Ваше регулярное выражение неверно. /.../
- это соглашение javascript для определения регулярных выражений. Попробуйте в С#:
if (Regex.IsMatch(info, @"^\d"))
Также обратите внимание, что вы должны использовать метод IsMatch, который возвращает логическое значение, или ваш код даже не будет компилироваться.
И если вы хотите, чтобы строка начиналась с одной или нескольких цифр:
if (Regex.IsMatch(info, @"^\d+"))
Ответ 2
Для этого вам не нужно регулярное выражение. Попробуйте
if (info.Length > 0 && char.IsDigit(info[0]))
{
...
}
Если вы хотите использовать регулярное выражение, выньте //
, чтобы он просто Regex.IsMatch(info,@"^\d")
.
Ответ 3
Это формат строки, которую вы передали в Regex.Match.
Правильный формат:
Regex.Match(info,@"^\d")
Значение @означает, что escape-символы (например, обратная косая черта) рассматриваются как обычные символы. Без него ваше регулярное выражение должно быть "^\\d"
.
Ответ 4
Ваше регулярное выражение неверно..Net не использует регулярные выражения perl-стиля. Правильное выражение: @ "^\d".
И вы должны использовать Regex.IsMatch(...), если вы не собираетесь использовать MatchCollection из .Match для чего-либо:
RegEx.IsMatch(info, @"^\d")
Ответ 5
Если вы пытаетесь выяснить, начинается ли строка с номера.
Как и выше, вы можете использовать canskip с помощью регулярного выражения.
Просто используйте Substring, удалите первый символ и проверьте, является ли это числом.
Теперь, если вы пытаетесь удалить все число, я бы преобразовал строку в массив char и проверил символы.
псевдо
string s = ""
для каждого c в символах {
если с - число, то s + = c
еще выход для
}
преобразуйте s в целое число, вы получили номер в начале строки.