Разбор строки и поиск конкретного текста в C # - PullRequest
4 голосов
/ 21 февраля 2011

У меня есть строка, которая содержит, скажем, слово «ключ» 5 раз. Каждый раз, когда я вижу слово «ключ» в этой строке, я хочу напечатать какой-нибудь текст. Как я могу разобрать эту строку, найти все ключевые слова и напечатать тексты соответственно? 5 слов «ключ» - 5 печатных текстов. Это должно быть сделано в C #.

Заранее спасибо.

Ответы [ 4 ]

7 голосов
/ 21 февраля 2011

Как насчет использования Regex.Matches:

string input = ...
string toPrint = ...

foreach (Match m in Regex.Matches(input, "key"))
    Console.WriteLine(toPrint);

РЕДАКТИРОВАТЬ : если под "словом" вы подразумеваете "целые слова"', вам нужно другое регулярное выражение, например:

@"\bkey\b"
0 голосов
/ 21 февраля 2011

Если это строка из нескольких слов, вы можете использовать LINQ.

string texttosearch;
string texttofind;

string[] source = texttosearch.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' },    StringSplitOptions.RemoveEmptyEntries);
 var matchQuery = from word in source
                     where word.ToLowerInvariant() == texttofind.ToLowerInvariant()
                     select word;

    foreach (string s in matchquery)
       console.writeline(whatever you want to print);
0 голосов
/ 21 февраля 2011

У меня есть метод расширения, который я использую для строк, чтобы получить индексы подстроки, поскольку .Net предоставляет только IndexOf (один результат для первого совпадения подстроки).

public static class Extensions
{
    public static int[] IndexesOf(this string str, string sub)
    {
        int[] result = new int[0];

        for(int i=0; i < str.Length; ++i)
        {
            if(i + sub.Length > str.Length)
                break;
            if(str.Substring(i,sub.Length).Equals(sub))
            {
                Array.Resize(ref result, result.Length + 1);
                result[result.Length - 1] = i;
            }
        }
        return result;
    }
}

Вы можете использовать метод расширения для всех экземпляров ключа для печати чего-либо

int[] indexes = stringWithKeys.IndexesOf("key");

foreach(int index in indexes)
{
    // print something
}

Я знаю, что мой пример кода может быть самым длинным, но метод расширения можно использовать повторно, и вы можете поместить его в библиотеку типов "утилит" для дальнейшего использования.

0 голосов
/ 21 февраля 2011

Внутри цикла вы можете использовать метод substring (), который предлагает параметр начальной позиции, и с каждой итерацией вы продвигаете начальную позицию; Цикл завершается, когда вы достигаете условия «строка не найдена». РЕДАКТИРОВАТЬ: что касается печати текста, это будет зависеть от того, где вы хотите напечатать его. РЕДАКТИРОВАТЬ 2: Вам также необходимо подумать, может ли целевая строка появиться таким образом, который вы бы не сочли истинным «хитом»:

          The key to success, the master key, is getting off your keyster...
...