C# 用于包含一个字符串和排除第二个字符串的正则表达式?
我正在寻找符合以下规则的正则表达式:C# 用于包含一个字符串和排除第二个字符串的正则表达式?,c#,regex,C#,Regex,我正在寻找符合以下规则的正则表达式: 包含路径的控件 包含一个引号(”),后跟任意数量的字符 字符必须不以.cs结尾 必须有第二个单独的报价 未找到包含的或未实现IController 样本输入: 异常消息:路径“/MyApplication/Scripts/jquery-1.10.2.min.js”的控制器未找到或未实现IController 异常消息:路径“/MyApplication/Content/bootstrap.min.css”的控制器未找到或未实现IController 我没有
”
),后跟任意数量的字符.cs
结尾或未实现IController
我没有处理我们的主应用程序的错误日志库/集成到我们的应用程序,但是我得到了几十个这样的日志文件,告诉我我的CSS和Javascript没有实现IController。我不明白为什么,所以我写了一些东西,同时删除了它们。它比我想象的更“僵硬”:
string[] regexExpressions = {
"(The controller for path)(\\s)'([^']*?)[.]js'(?:$|\\s)(was not found or does not implement IController.)",
"(The controller for path)(\\s)'([^']*?)[.]css'(?:$|\\s)(was not found or does not implement IController.)"
};
List<Regex> regexList = new List<Regex>();
foreach (string expression in regexExpressions)
regexList.Add(new Regex(expression);
//Loop over each file in a directory
//Nested loop to iterate over my List<Regex>
// to compare every file against every regex
// building a list any time I find a match
//Delete files which match any one of my regex
string[]regexExpressions={
“(路径的控制器)(\\s)([^']*?)[.]js'(?:$)\\s)(未找到或未实现IController。)”,
(路径的控制器)(\\s)([^']*?)[.]css'(?:$|\\s)(未找到或未实现IController。)”
};
List regexList=新列表();
foreach(正则表达式中的字符串表达式)
添加(新的正则表达式);
//在目录中的每个文件上循环
//嵌套循环以迭代我的列表
//将每个文件与每个正则表达式进行比较
//在我找到匹配项时建立一个列表
//删除与任意一个正则表达式匹配的文件
(比这要复杂一点,但这才是最重要的)
我刚刚返回并向字符串[]添加了其他正则表达式regexExpressions
我注意到越来越多类型的不重要的错误日志。但是,我不想每次我发现一个新的文件类型抛出一个我不关心的错误时都要修改这个工具。最初我只为*.js编写了它,然后注意到*.css也抛出了这些错误,现在我发现了一些带有这个sam的*.map文件e错误消息
那么,我如何才能将其更改为查找除.cs
之外的任何引用
我想我可以跳过上面列表中的前两个需求,重要的是没有找到
,或者没有实现IController
。我只是在之前包含了所有其他内容,因为我希望尽可能明确,避免意外删除可能不需要的内容ot表示删除。以下正则表达式不包括cs文件:
'[^']+?\.(?!cs')[^'.]+?'
此表达式检查单引号之间的文本是否包含至少一个字符,即后跟至少一个字符而不是cs'
的点。它还可以匹配扩展名以cs
开头的行
正则表达式组(?!something)称为负前瞻。
你可以阅读更多的信息
如果你想确保句子正确,你可以这样加上:
The controller for path '[^']+\.(?!cs')[^'.]+?' was not found or does not implement IController\.
您可以在操作中查看它,或者。这应该可以:
string[]输入={
“未找到路径“/MyApplication/Scripts/jquery-1.10.2.min.js”的控制器,或者该控制器未实现IController。”,
“找不到路径'/MyApplication/Content/bootstrap.min.css'的控制器,或者该控制器未实现IController。”
};
字符串模式=@“路径“(?'path.+)\(?'ext.+)”的控制器”;
foreach(输入中的字符串输入)
{
Match=Regex.Match(输入,模式);
字符串ext=match.Groups[“ext”].Value;
if(match.Success&&match.Groups[“ext”].Value!=“cs”)
{
Console.WriteLine(match.Groups[“path”].Value+“+match.Groups[“ext”].Value);
}
}
Console.ReadLine();
给出一个字符串输入的示例。@jdweng更新了我的问题,添加了两个示例文本beautiful;对我有用!谢谢。您知道您更改的位的名称吗--(?!cs”)
?为了更好地阅读/理解它,我不知道具体的语法是什么。@sab669我很高兴它起作用了。我更新了关于您问题的答案。:)