从方括号之间的字符串中提取一组数字

时间:2019-04-02 19:39:12

标签: 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#中。

2 个答案:

答案 0 :(得分:5)

尝试使用正则表达式:(?<=TKNM-)\d+

Demo

使用Regex.Match

答案 1 :(得分:0)

这是一个Linq解决方案,它也可以检测到多次出现的情况,如果您不希望它丢弃其余部分并优先使用,或者如果票证前缀是动态的,则可以使其成为通用函数,并将其添加为函数的输入:

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


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

Working Example/Demo