我希望从String
中获取一个子串。
我想要的子串是一系列数字字符。
输入
"abcdefKD-0815xyz42ghijk";
"dag4ah424KD-42ab333k";
"BeverlyHills90210KD-433Nokia3310";
通常它可以是任何String,但它们都有一个共同点:
在上面的示例中,此数字分别为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
(它可以是任意长度,但不能在四位数后切割)。
答案 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);
}