如何使用c#检查文本文件中是否包含多行字符串?
我有一个包含一些HTML源代码的文本文件。我想检查文本文件是否包含“给定脚本”。例如: 让这是脚本如何使用c#检查文本文件中是否包含多行字符串?,c#,regex,web-scraping,C#,Regex,Web Scraping,我有一个包含一些HTML源代码的文本文件。我想检查文本文件是否包含“给定脚本”。例如: 让这是脚本 _siteid = "bac29411-930d-43b2-8aab-0ec92fb7ab24"; _subscriberId = "03aab4ac-8f05-42d6-b51b-55f7abcdc092"; function comCC24StartFunctioning(scriptSource) { var scrDynamicHeadAttr = docum
_siteid = "bac29411-930d-43b2-8aab-0ec92fb7ab24";
_subscriberId = "03aab4ac-8f05-42d6-b51b-55f7abcdc092";
function comCC24StartFunctioning(scriptSource)
{
var scrDynamicHeadAttr = document.createElement('script');
scrDynamicHeadAttr.setAttribute('src', scriptSource);
scrDynamicHeadAttr.setAttribute('type', 'text/javascript');
scrHeadAttr = document.getElementsByTagName('head')[0];
scrHeadAttr.insertBefore(scrDynamicHeadAttr, scrHeadAttr.firstChild);
}
一种方法是从脚本和HTML源代码中删除换行符。然后您基本上有两个字符串,需要查看其中一个是否是另一个的一部分。一种方法是从脚本和HTML源代码中删除换行符。然后基本上有两个字符串,需要查看其中一个是否是另一个的一部分。我不会说这是正则表达式的工作,问题要么太简单,要么太复杂,这取决于“包含给定脚本”的含义 如果你的意思是它是否包含一个逐字的字符匹配你可以使用 如果脚本的格式可能不同,则可以删除所有空白,然后执行String.IndexOf 但是,如果您指的是具有相同行为的脚本,但可能具有不同的结构、变量名等,那么您需要解析HTML和javascript并分析语法树,这将非常复杂
另一种方法是只查找脚本中较小的不变部分,例如只搜索'comc24startfunction',再次使用String.IndexOf。我不会说这是正则表达式的工作,问题要么太简单,要么太复杂,这取决于您所说的“包含给定脚本”的含义 如果你的意思是它是否包含一个逐字的字符匹配你可以使用 如果脚本的格式可能不同,则可以删除所有空白,然后执行String.IndexOf 但是,如果您指的是具有相同行为的脚本,但可能具有不同的结构、变量名等,那么您需要解析HTML和javascript并分析语法树,这将非常复杂
另一种方法是只查找脚本中较小的不变部分,例如只搜索“comc24startfunction”,再次使用String.IndexOf。如果我理解正确,您只想搜索整个文件中的确切片段?那么,以下几点应该起作用:
string fileName = "your HTML file location";
string textToSearch = "your-script-snippet";
bool fileContainsScript = System.IO.File.ReadAllText(fileName).Contains(textToSearch);
如果我理解正确,您只想在整个文件中搜索确切的代码片段?那么,以下几点应该起作用:
string fileName = "your HTML file location";
string textToSearch = "your-script-snippet";
bool fileContainsScript = System.IO.File.ReadAllText(fileName).Contains(textToSearch);
最简单的方法是使用String类的Contains()方法。如果可能有一些额外的空格或换行符,可以基于字符串构建正则表达式模式并查找匹配项。为此,您必须转义正则表达式引擎认为“特殊”的所有字符,例如可能出现在脚本中的()[].*等,并用\s替换模式字符串中的白色字符*
string scriptToFind = ...
string fileToSearchText = ...
string patternToFind = Regex.Replace(@patternToFind, @"(\*|\.|\\|\(|\)|\[|\]|\{|\}|\+)",@"\$1"); // those aren't all special regex characters that need to be escaped
patternToFind = Regex.Replace(@scriptToFind, @"\s+",@"\s*");
bool isMatch = Regex.IsMatch(@fileToSearchText,@patternToFind);
出于测试目的:最简单的方法是使用String类的Contains()方法。如果可能有一些额外的空格或换行符,可以基于字符串构建正则表达式模式并查找匹配项。为此,您必须转义正则表达式引擎认为“特殊”的所有字符,例如可能出现在脚本中的()[].*等,并用\s替换模式字符串中的白色字符*
string scriptToFind = ...
string fileToSearchText = ...
string patternToFind = Regex.Replace(@patternToFind, @"(\*|\.|\\|\(|\)|\[|\]|\{|\}|\+)",@"\$1"); // those aren't all special regex characters that need to be escaped
patternToFind = Regex.Replace(@scriptToFind, @"\s+",@"\s*");
bool isMatch = Regex.IsMatch(@fileToSearchText,@patternToFind);
出于测试目的: