在特定单词后面从String返回一个数字

时间:2018-02-11 23:38:29

标签: c# .net regex substring

我希望从String中获取一个子串。

我想要的子串是一系列数字字符。

输入

"abcdefKD-0815xyz42ghijk";
"dag4ah424KD-42ab333k";
"BeverlyHills90210KD-433Nokia3310";

通常它可以是任何String,但它们都有一个共同点:

  • 有一部分以KD-
  • 开头
  • 以数字结尾
  • 数字消失后的一切。

在上面的示例中,此数字分别为081542433。但它可以是任何数字

现在我有一个包含KD之后的所有数字字符的子字符串 - 但我想只有字符串的0815ish部分。

到目前为止我有什么

String toMakeSub = "abcdef21KD-0815xyz429569468949489694694689ghijk";
toMakeSub = toMakeSub.Substring(toMakeSub.IndexOf("KD-") + "KD-".Length);
String result = Regex.Replace(toMakeSub, "[^0-9]", "");

结果是0815429569468949489694694689,但我只想要0815(它可以是任意长度,但不能在四位数后切割)。

1 个答案:

答案 0 :(得分:4)

它就像以下模式一样简单

(?<=KD-)\d+

阅读此内容的方式

(?<=subpattern)零宽度正向后视断言。仅当左侧的子模式匹配时才继续匹配

\d匹配任何十进制数字。

+匹配上一个元素一次或多次。

示例

var input = "abcdef21KD-0815xyz429569468949489694694689ghijk";
var regex = new Regex(@"(?<=KD-)\d+");
var match = regex.Match(input);

if (match.Success)
{
   Console.WriteLine(match.Value);
}

input = "abcdef21KD-0815xyz429569468949489694694689ghijk, KD-234dsfsdfdsf";

// or to match multiple times
var matches = regex.Matches(input);

foreach (var matchValue in matches)
{
   Console.WriteLine(matchValue);
}