Вы можете разделить, используя этот шаблон: @"(,)\s?|\s"
Это разделяет запятую, но сохраняет ее, так как она находится внутри группы. \s?
служит для соответствия необязательному пробелу, но исключает его из результата. Без этого разделение будет включать пространство, которое произошло после запятой. Далее, есть чередование для разделения на пробел в целом.
Чтобы классифицировать значения, мы можем взять первый символ строки и проверить тип, используя статические Char
методы.
string input = "There are 4 numbers in this string 40, 30, and 10";
var query = Regex.Split(input, @"(,)\s?|\s")
.Select(s => new
{
Value = s,
Type = Char.IsLetter(s[0]) ?
"String" : Char.IsDigit(s[0]) ?
"Number" : "Symbol"
});
foreach (var item in query)
{
Console.WriteLine("{0} : {1}", item.Value, item.Type);
}
Чтобы использовать метод Regex.Matches
, можно использовать этот шаблон: @"\w+|,"
var query = Regex.Matches(input, @"\w+|,").Cast<Match>()
.Select(m => new
{
Value = m.Value,
Type = Char.IsLetter(m.Value[0]) ?
"String" : Char.IsDigit(m.Value[0]) ?
"Number" : "Symbol"
});