我有一个文件,我希望在其中找到以" abc'"开头的字符串,包含字符" s",并以&#34结尾末端&#34 ;.这些字符串可以占用多行,但在任何情况下都不包含单词" end"除了标记字符串的结尾。正则表达式看起来像abc' [^ end] s [^ end] 但显然[^ end]不会否定单词" end"。我使用.NET框架,所以我可以访问前瞻/后面可以否定单词,但我以前从未使用过它们,我不确定如何用它来解决这个问题(或者如果他们需要的话。有什么建议吗?
答案 0 :(得分:0)
(考虑到评论的修改后的答案)
正则表达式非常差,不匹配多字符文字。也就是说,它非常擅长匹配"而不是x"或者"不是空格"但是不匹配像" end"这样的字符串是非常困难的(有时是不可能的)。这就是为什么我原来尝试这种解决方案的原因甚至都没有尝试过。
鉴于你可以拥有以" abc"开头的字符串。结束"结束",但不要有" s"在他们中,你有一个更大的问题。在这种情况下,我强烈建议使用两个正则表达式:一个匹配外部表达式,然后一个匹配内部异常。使用此方法的一种简单方法是使用Regex.Replace
(即使您实际上并不打算进行任何替换),因为它允许您传入代理进行替换。在您的情况下,您可以这样做:
Regex.Replace(s, "abc[\\s\\S]*?end", (m) => {
if(Regex.IsMatch(m.ToString(), "s")) Console.WriteLine("Found match: "
+ m.ToString());
return m.ToString();
});
这实际上不会进行任何替换(因为替换字符串本身就是匹配)。在代表内部,您将能够检查以" abc"开头的所有字符串。结束"结束"。你可以简单地忽略任何没有" s"在他们中间。