2011-05-23 36 views
3

我想要計算整個文件(例如<tag>bla<tag> == 6)的開始和結束'<'和'>'之間的字符數。我總是可以寫一個快速算法來做到這一點,但我很想知道是否有另一種方法。也許正則表達式?計算整個文件的開始和結束'<' and '>'之間的字符數

感謝

+2

這取決於。你究竟是什麼意思?他們是否可嵌套?你想包括嵌套的部分? – Ryan 2011-05-23 23:20:15

+0

正則表達式不計算任何東西,所以可能不會。 – 2011-05-23 23:20:32

+0

@Oli - 但是一個正則表達式可以得到< and >之間的所有匹配,並且將它們的長度加起來可以算是一個工作... – 2011-05-23 23:21:22

回答

1

你可以用正則表達式做這樣的:

var brackets = new char[] {'<', '>'}; 
int counter = 0; 
foreach (var match in System.Text.RegularExpressions.Regex.Matches(data, @"</?[^<>]+>")) 
    counter += match.ToString().Trim(brackets).TrimStart('/').Length; 

這也算正常結束標記,如果你碰巧有那些以及。

2

這也可能是你已經想好了什麼,但:

 string s = System.IO.File.ReadAllText("myfile.txt"); 
     bool inbrackets = false; 
     int count = 0; 
     foreach (char ch in s) 
     { 
      if (ch == '<') 
       inbrackets = true; 
      else if (ch == '>') 
       inbrackets = false; 
      else if (inbrackets) 
       ++count; 
     } 

     System.Console.WriteLine("count = " + count); 

更新:如果你想處理的嵌入式支架,只需使用一個int計數器,而不是一個布爾值。對不起,這很明顯,但只是一個事後的想法。

0

假設沒有嵌套的標籤,並已形成良好的輸入

var charcount = File.ReadAllText("C:\foo.txt").Split('<') 
    .Select(x => x.IndexOf('>')).Where(x => x > 0).Sum(); 

如果你有嵌套或需要錯誤檢查,很明顯,你會需要寫的東西更徹底。

0
int sum = new Regex("<([^<>]+?)>").Matches("<tag>bla<tag>") 
            .Cast<Match>() 
            .Sum(m => m.Value.Length - 2); 
     = 6 
相關問題