2016-03-02 61 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,這在我的書是可以接受的:)

希望這給你需要什麼!

相關問題