2016-03-02 62 views
0

我在string阵列中列出了files.aspx,.cs,.html等)。 我阅读了file的所有内容。直到这里还好!如何读取所有文件内容并使用C#在文件内容中查找字符串?

我想要做什么是我想要搜索特定字符串

EG:

<meta name="description" content="NOINDEX" /> 
<meta name="keywords" content="NOINDEX" /> 

通过文件(S)的列表循环和获取文件的内容和检查是否contains搜索字符串

foreach (string item in strFiles) 
       { 
        innerList = item.Split(','); 
        if(!string.IsNullOrEmpty(innerList[0])) 
        { 
         fileList.Add(innerList[0]); 
         fileContents = File.ReadAllText(innerList[0].Replace("\\\\","\\")); 
         //if(fileContents.Contains("")) 
         if (fileContents.IndexOf(strToSearch) != -1) 
         { 
          Console.WriteLine("string contains strsearch"); 
         } 
        } 
       } 

上面的代码遍历所有files和一个读取所有文件中的一个内容,但是,我不能够比较/找到文件内容完全匹配的字符串。

由于文件内容/换行字符等额外的空间

样品 'fileContent' 字符串:

<%@ Page Title="" Language="C#" MasterPageFile="~/_masterpages/MasterPage.master" AutoEventWireup="true" CodeFile="ChangePassword.aspx.cs" Inherits="Account_ChangePassword" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
<meta name="description" content="NOINDEX" /> 
<meta name="keywords" content="NOINDEX" /> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentHeaderNav" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content3" ContentPlaceHolderID="ContentBody" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content4" ContentPlaceHolderID="ContentToggleBox" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content5" ContentPlaceHolderID="ContentBottom" Runat="Server"> 
</asp:Content> 

样品 '搜索字符串':

<meta name="description" content="NOINDEX" /><meta name="keywords" content="NOINDEX" /> 

任何建议,请... ...!

帮助感谢!

+0

你没有得到任何结果的原因是,indexof-方法也验证字符如\ r \ n(换行符等)。你必须把它们放到你的搜索字符串:) – Jannik

+0

它更好地使用RegularExpressions,因为它可以检测到所有的变化,如空格,额外的属性,... –

回答

1

您可以搜索使用正则表达式

foreach (string item in strFiles) 
       { 
        innerList = item.Split(','); 
        if(!string.IsNullOrEmpty(innerList[0])) 
        { 
         fileList.Add(innerList[0]); 
         fileContents = File.ReadAllText(innerList[0].Replace("\\\\","\\")); 
         if(Regex.IsMatch(fileContents,@"<meta[^>]*name=""description""[^>]*content=""NOINDEX""[^*]*/>\s*<meta[^>]*name=""keywords""[^>]*content=""NOINDEX""[^*]*/>")) 
          { Console.WriteLine("string contains strsearch"); 
} 
         } 
        } 
       } 

如果要替换它像您可以使用替换:

Regex.Replace(fileContents,@"<meta[^>]*name=""description""[^>]*content=""NOINDEX""[^*]*/>\s*<meta[^>]*name=""keywords""[^>]*content=""NOINDEX""[^*]*/>", ReplacementString) 
+0

我有标签列表,这是从'filecontent'搜索字符串如何匹配这些字符串/内容?我的意思是如何为用于比较数据库的字符串添加正则表达式? –

+0

以及你也可以使用正则表达式,你可以为标签创建一个regularexpressions列表并在内容循环搜索它们:'MyTags.ForEach(t => AppendResult(t));','Public AppendResult(string x ){if(Regex.IsMatch(fileContents,x)) {Console.WriteLine(“string contains strsearch”);}}' –

+0

您能否告诉我正则表达式中使用的符号的含义?我是新来的...... :) –

1

我做了类似的没有的东西时,我写了一个小程序,以不久前找到隐藏在其他英文单词中的英文单词,如果您从“外”单词中删除“内”单词,如果结果仍然是英文单词(是的,我确实有时会感到无聊)

结果是一个我认为与你有关的小博客帖子,主要是因为我正在加载一个TON文件并搜索它们。

Here is the blogpost

正如你所看到的,我没有使用并行执行,以加快这一进程,这东西给我结果小于50ms,这在我的书是可以接受的:)

希望这给你需要什么!

相关问题