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

时间:2013-11-21 12:55:21

标签: c# regex web-scraping

我有一个包含一些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);    
}

4 个答案:

答案 0 :(得分:2)

我不会说这是一个正则表达式的工作,问题要么太简单,要么太复杂,取决于“包含给定脚本”的含义。

如果您的意思是包含字符匹配的逐字字符,则可以使用String.IndexOf

如果脚本的格式可能不同,您可以通过删除所有空格然后再执行String.IndexOf来逃脱。

但是如果你的意思是一个脚本具有相同的行为,但可能有不同的结构,变量名等,那么你需要解析HTML和javascript并分析那些非常复杂的语法树。

另一种选择可能是只查找脚本中较小的不变部分,例如,再次使用String.IndexOf搜索“comCC24StartFunctioning”。

答案 1 :(得分:1)

如果我理解正确,您只想在整个文件中搜索确切的代码段?那么以下应该有效:

string fileName = "your HTML file location";
string textToSearch = "your-script-snippet";
bool fileContainsScript = System.IO.File.ReadAllText(fileName).Contains(textToSearch);

答案 2 :(得分:0)

一种方法是从脚本和HTML源代码中删除换行符。那么你基本上有两个字符串,需要看一个是否是另一个字符串的一部分。

答案 3 :(得分:0)

最简单的方法是使用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);

用于测试目的:http://gskinner.com/RegExr/