Regex как разделить строку на цифры и буквы

Есть строки такого типа:

МАП 50-00, МАП 50-02, КАТ 12582365, КРТВ 123456, саа123456 (Аввв) и т.п.

как с помощью регулярки можно разделить строки на цифры и буквы в данном случае символ (-) должен входить в числа

МАП
50-00

МАП
50-02

КАТ 
12582-365

КРТВ 
123456

саа
123456

Пробовал (\D) (\d+-*) (\d+) ([\D]\D) не один вариант не подошёл, все варианты работают частично.

Возможно ли так сделать?


Ответы (2 шт):

Автор решения: PotroNik
([А-ЯЁа-яё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

→ Ссылка
Автор решения: Alexander Petrov

Предлагаю использовать категории юникода. В частности, 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();
}
→ Ссылка