Asp.net 正则表达式中的Not运算符

Asp.net 正则表达式中的Not运算符,asp.net,regex,not-operator,Asp.net,Regex,Not Operator,给定以下字符串 1080s: 33, 6&apos;2&quot; meg: test. 1748s: I THINK IM GONNA <span class="highlight" >PICK</span> 1749s: TWO COMPLETE OPPOSITES. 正则表达式将匹配,但捕获不正确。正则表达式在找到\d*或s:后立即跳过文本。当且仅当同时找到\d*s:时,我希望它跳过 我尝试了几种不同的方法,但仍然没有找到如何在not运算符中组合\

给定以下字符串

1080s: 33, 6&apos;2&quot; meg: test. 1748s: I THINK IM GONNA <span class="highlight" >PICK</span> 1749s: TWO COMPLETE OPPOSITES.
正则表达式将匹配,但捕获不正确。正则表达式在找到
\d*
s:
后立即跳过文本。当且仅当同时找到
\d*s:
时,我希望它跳过


我尝试了几种不同的方法,但仍然没有找到如何在not运算符中组合
\d*
s:

您必须告诉正则表达式引擎:“在正则表达式的末尾,在匹配之后,必须有
(\\d*)(s:)
或字符串结尾”。这可以使用@Ilya建议使用的前瞻来完成

var pattern = @"\b(?=\s*\d{0,4}s:)";
var lines = new Regex(pattern).Split(input).Where(
    s => 
    string.IsNullOrEmpty(s.Trim()) == false).ToArray();
解释
\b(?=\s*\d{0,4}s:)
->从单词边界开始,匹配后缀,但将其从捕获中排除。后缀定义为“任意数量的空白字符,后跟长度为0到4的数字,后跟s,然后后跟
”。

拆分输入后,清除输入以删除空条目。

如果要匹配任意数字(而不仅仅是4位),可以使用以下代码:

var pattern = @".+?(?<!\d)((?=\d+s:)|$)";
var matches = Regex.Matches(input, pattern);

var pattern=@“+?(?谢谢Devendra..它工作得很好..只是有一个问题。我在s:之前的数字字可以是0到4个字符长..它可能不总是4个字符长..我已经对它应用了以下更改…@“(?=\s*\d{1,4}s:)”和@“(?=\s*\d*s:)“但它并没有像我需要的那样给我返回准确的结果……你能帮我解决这个问题吗?坦斯克利亚……我真的帮了我。”。
var pattern = @"\b(?=\s*\d{0,4}s:)";
var lines = new Regex(pattern).Split(input).Where(
    s => 
    string.IsNullOrEmpty(s.Trim()) == false).ToArray();
var pattern = @".+?(?<!\d)((?=\d+s:)|$)";
var matches = Regex.Matches(input, pattern);