我想要計算整個文件(例如<tag>bla<tag> == 6
)的開始和結束'<'和'>'之間的字符數。我總是可以寫一個快速算法來做到這一點,但我很想知道是否有另一種方法。也許正則表達式?計算整個文件的開始和結束'<' and '>'之間的字符數
感謝
我想要計算整個文件(例如<tag>bla<tag> == 6
)的開始和結束'<'和'>'之間的字符數。我總是可以寫一個快速算法來做到這一點,但我很想知道是否有另一種方法。也許正則表達式?計算整個文件的開始和結束'<' and '>'之間的字符數
感謝
你可以用正則表達式做這樣的:
var brackets = new char[] {'<', '>'};
int counter = 0;
foreach (var match in System.Text.RegularExpressions.Regex.Matches(data, @"</?[^<>]+>"))
counter += match.ToString().Trim(brackets).TrimStart('/').Length;
這也算正常結束標記,如果你碰巧有那些以及。
這也可能是你已經想好了什麼,但:
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計數器,而不是一個布爾值。對不起,這很明顯,但只是一個事後的想法。
假設沒有嵌套的標籤,並已形成良好的輸入
var charcount = File.ReadAllText("C:\foo.txt").Split('<')
.Select(x => x.IndexOf('>')).Where(x => x > 0).Sum();
如果你有嵌套或需要錯誤檢查,很明顯,你會需要寫的東西更徹底。
int sum = new Regex("<([^<>]+?)>").Matches("<tag>bla<tag>")
.Cast<Match>()
.Sum(m => m.Value.Length - 2);
= 6
這取決於。你究竟是什麼意思?他們是否可嵌套?你想包括嵌套的部分? – Ryan 2011-05-23 23:20:15
正則表達式不計算任何東西,所以可能不會。 – 2011-05-23 23:20:32
@Oli - 但是一個正則表達式可以得到< and >之間的所有匹配,並且將它們的長度加起來可以算是一個工作... – 2011-05-23 23:21:22