Если вы хотите сопоставить любое количество цифр (а не только 4), вы можете сделать это, используя этот код:
var pattern = @".+?(?<!\d)((?=\d+s:)|$)";
var matches = Regex.Matches(input, pattern);
.+?
является нежадным совпадение хотя бы одного символа.Он должен быть не жадным, иначе .+
будет соответствовать всей строке, пропускающей любые вхождения \d+s:
.
(?<!\d)
является отрицательным взглядом позади , который гарантирует, чтопоследний символ, соответствующий .
, не является цифрой.Это необходимо, потому что число цифр не фиксировано, чтобы сказать 4. Если этот взгляд за спиной не включен, вход «X12» может соответствовать либо any, digit, digit
, либо any, any, digit
.Вы хотите избежать второго совпадения и хотите, чтобы заглядывание показывало, что 1
соответствует digit
, а не any
.
((?=\d+s:)|$)
является положительным прогнозом , которыйгарантирует, что совпадение заканчивается либо несколькими цифрами, за которыми следует s:
, либо просто концом строки ($
).Обратите внимание, что этот прогноз является утверждением и не включен в сравнение.Это просто гарантирует, что за матчем следует предвкушение.