Подсчитайте количество символов между открытием и закрытием '<' и '>' для всего файла - PullRequest
3 голосов
/ 24 мая 2011

Я хотел бы посчитать количество символов между открытием и закрытием '<' и '>' для всего файла (например, <tag>bla<tag> == 6). Я всегда мог написать быстрый алгоритм, чтобы сделать это, но мне любопытно узнать, есть ли другой способ. Может быть, регулярное выражение?

Спасибо

Ответы [ 4 ]

2 голосов
/ 24 мая 2011

Это, вероятно, то, что вы уже имели в виду, но:

        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 вместо bool.Извините, это очевидно, но просто запоздалая мысль.

1 голос
/ 24 мая 2011

Вы можете с помощью регулярных выражений сделать это так:

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

Это также правильно подсчитывает конечные теги, если они у вас есть.

0 голосов
/ 24 мая 2011
int sum = new Regex("<([^<>]+?)>").Matches("<tag>bla<tag>")
                                  .Cast<Match>()
                                  .Sum(m => m.Value.Length - 2);
        = 6
0 голосов
/ 24 мая 2011

При условии, что нет вложенных тегов, и вы правильно сформировали ввод

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

Если у вас есть вложенность или вам нужна проверка ошибок, очевидно, вам нужно написать что-то более тщательное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...