我想从string
中得到一个子字符串。
我想要的子字符串是一个数字字符序列。
输入
"abcdefKD-0815xyz42ghijk";
"dag4ah424KD-42ab333k";
"BeverlyHills90210KD-433Nokia3310";
通常可以是任何字符串,但它们都有一个共同点:
在上面的示例中,这个数字将分别为0815
、42
、433
。但它可以是任何数字
现在我有一个子字符串,它包含KD之后的所有数字字符--但我希望只有字符串的0815ish部分。
我目前所拥有的
String toMakeSub = "abcdef21KD-0815xyz429569468949489694694689ghijk";
toMakeSub = toMakeSub.Substring(toMakeSub.IndexOf("KD-") + "KD-".Length);
String result = Regex.Replace(toMakeSub, "[^0-9]", "");
结果是0815429569468949489694694689
,但我只想要0815
(它可以是任何长度,但不可能在四位之后剪切)。
它和下面的模式一样简单
(?<=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);
}