Regex как разделить строку на цифры и буквы
Есть строки такого типа:
МАП 50-00, МАП 50-02, КАТ 12582365, КРТВ 123456, саа123456 (Аввв) и т.п.
как с помощью регулярки можно разделить строки на цифры и буквы
в данном случае символ (-) должен входить в числа
МАП
50-00
МАП
50-02
КАТ
12582-365
КРТВ
123456
саа
123456
Пробовал (\D) (\d+-*) (\d+) ([\D]\D)
не один вариант не подошёл, все варианты работают частично.
Возможно ли так сделать?
Ответы (2 шт):
([А-ЯЁа-яёA-Za-z]+)\s?(\d+(?:-\d+)?)
первая группа ([А-ЯЁа-яёA-Za-z]+) - обязательно один и более буквенных символов
\s? - ноль или один пробельный символ
(\d+(?:-\d+)?) - одна и более цифра, с необязательной группой -одна и более цифра
пример: https://regex101.com/r/mZuHlw/1/
Что бы можно было выбрать текст из нескольких слов
([А-ЯЁа-яё]+(?:\s[А-ЯЁа-яё]+)*)\s?(\d+(?:-\d+)?)
Пример: https://regex101.com/r/mZuHlw/2
Предлагаю использовать категории юникода. В частности, L означает любую букву в любом алфавите. Благодаря этому шаблон регулярки получается лаконичным (и понятным).
string input = "МАП 50-00, МАП 50-02, КАТ 12582365, КРТВ 123456, саа123456";
string pattern = @"(\p{L}+)\s*([\d-]+)";
var matches = Regex.Matches(input, pattern);
foreach (Match m in matches)
{
Console.WriteLine(m.Groups[1].Value);
Console.WriteLine(m.Groups[2].Value);
Console.WriteLine();
}