Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c#检查文本文件中是否包含多行字符串?_C#_Regex_Web Scraping - Fatal编程技术网

如何使用c#检查文本文件中是否包含多行字符串?

如何使用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

我有一个包含一些HTML源代码的文本文件。我想检查文本文件是否包含“给定脚本”。例如:

让这是脚本

_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);
出于测试目的: