Извлеките группу чисел из строки, заключенной в квадратные скобки

#c#

#c#

Вопрос:

Мне нужно извлечь номер билета из строки. Пример строки:

 string body = "Hello, world welcome. [TKNM-1234] Blah blah [HelpCode-5] Blah blah";
  

Мне нужно извлечь ТОЛЬКО 1234 из этой строки. Каков наилучший способ сделать это. Ранее я уже пробовал это:

 int from = body.IndexOf("[TKNM-")   "[TKNM-".Length;
int to = body.LastIndexOf("]");
ticketNumber = body.Substring(from, to - from);
  

Но у этого были проблемы из-за других скобок после TKNM. Все находится на C #.

Комментарии:

1. Это не ASP.Net этот тег должен исчезнуть.

Ответ №1:

Попробуйте регулярное выражение: (?<=TKNM-)d

ДЕМОНСТРАЦИЯ

Используйте регулярное выражение.Совпадение

Комментарии:

1. Я бы сказал (?<=[TKNM-)d — почти то же самое

Ответ №2:

Вот решение Linq, оно также обнаружит несколько вхождений, если вы не хотите, чтобы оно отбрасывало остальные и принимало первое, или может сделать его универсальной функцией, если префиксы билетов являются динамическими, и добавить их в качестве входных данных в функцию:

   var body = "Hello, world welcome. [TKNM-1234] Blah blah [HelpCode-5] Blah blah";
    var ticketnumbers = body.Split()
                            .Where(x => x.StartsWith("[TKNM") amp;amp; x.EndsWith("]"))
                            .Select(x=>x.Replace("[", string.Empty).Replace("]", string.Empty).Split('-')[1]).ToList();


    Console.WriteLine(string.Join(", ", ticketnumbers));
  

Рабочий пример / демонстрация