4

私がこのような文字列を持っていたとしましょう:

string source = "Today is friday! I'm am having trouble programming this. Today is friday! Tomorrow is saturday. Today is friday!"

この文字列を検索して、「今日は金曜日です!」という文をすべて取得し、見つけた文を使用して新しい文字列を作成します。

上記の文字列から期待される結果は次のとおりです。

string output = "Today is friday!Today is friday!Today is friday!"

編集:LINQは必須ではありません。

ありがとう!

4

4 に答える 4

7

これを行う非LINQメソッドは次のとおりです。

string str = "Today is friday! I'm am having trouble programming this. Today is friday! Tomorrow is saturday. Today is friday!";

StringBuilder sb = new StringBuilder();
int index = 0;
do
{
    index = str.IndexOf("Today is friday!", index);
    if (index != -1)
    {
        sb.Append("Today is friday!");
        index++;
    }
} while (index != -1);

string repeats = sb.ToString();
于 2012-08-31T18:41:17.297 に答える
4

実際には、一致するものを見つける必要はありません。検索パターンに基づいて新しい文字列を作成しているので、検索文字列の出現回数を単純に数えれば十分です。必要に応じて、正規表現をより高速な部分文字列カウントアルゴリズムに置き換えることができます。

string source = "Today is friday! I'm am having trouble programming this. Today is friday! Tomorrow is saturday. Today is friday!";
string searchPattern = "Today is friday!";
int count = Regex.Matches(source, searchPattern).Count;
string result = string.Concat(Enumerable.Repeat(searchPattern, count));
于 2012-08-31T18:34:21.813 に答える
4

正規表現

探す:

.*?(Today is friday).*?(?=\1|$)

交換:

$1

説明

.*?                 # match everything before an occurrence of the sentence
(Today is friday!)  # match the sentence
.*?                 # match everything after the sentence...
(?=\1|$)            # ...up to the next occurrence or end of the string
于 2012-08-31T21:02:45.003 に答える
2

さて、最初に行う必要があるのは、1つの文字列を多数にすることです。String.Split()はここで機能するはずです。正規表現は必要ありません。

var sentences = inputString.Split('.','!');

個々の文を取得したら、基準に一致する文を探す必要があります。

var todayIsFridaySentences = sentences.Where(s=>s.Contains("Today is friday"));

...そして最後にそれらを元に戻します。これに絶対にLinqを使用する必要がある場合:

var ouputString = todayIsFridaySentences
                     .Aggregate(new StringBuilder(), (s,b) => b.Append(s))
                     .ToString();
于 2012-08-31T18:23:01.207 に答える