提问者:小点点

从特定单词后面的字符串返回一个数字


我想从string中得到一个子字符串。

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

输入

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

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

  • 有一个部分以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个答案

匿名用户

它和下面的模式一样简单

(?<=KD-)\d+

阅读这个的方法

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

\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);
}