2012-04-27 11 views
0

私のようなリストがあります:私はすでに試した "fguhCool" によりFG、FGU、およびfguhを交換したいと思います正確な単語をリスト内の別の単語に置き換えるにはどうすればいいですか?

  • ジョージFG
  • ミッシェルFGU
  • ヤセルのfguh

  foreach (var ignore in NameToPoulate) 
     { 
      tempo = ignore.Replace("fg", "fguhCool"); 
      NameToPoulate_t.Add(tempo); 
     } 

しかし、 "fgu"は "fguhCoolu"と "fguh"になります。 "fguhCooluh"が来た方が良いアイデアはありますか?

ありがとうございました。

+0

交換部品の選択に関する実際のルールは何ですか? ' fg <スペースまでの他の文字>'ですか?あるいは、 ' fg <行末まで>'または 'fg <後のもの>'だけですか?これらがどのように異なっているか見ることができますか? – yamen

+0

これが宿題/学業の場合は、そのようにタグ付けする必要があります。 – Tormod

答えて

0

あなたは正規表現を使用できます。

Regex.Replace(@"\bfg\b", "fguhCool"); 

\bは、それが(大体が、十分にこの目的のために)言葉のbeginnnigまたは末尾にマッチ意味いわゆるワード境界と一致します。

0

は、正規表現を使用します

Regex.Replace("fg(uh?)?", "fguhCool"); 

は代替が、その後(私はすべての単語と仮定しています終了値の短縮を交換し、最初の短いもの、長い単語を置き換えることになる - 「FG」を、 「FGU」と「fguh」 - ?その言葉はどこにでも文字列で表示されることが前提として右、同じ値「fguhCool」にマップされます)

tempo = ignore 
    .Replace("fguh", "fg") 
    .Replace("fgu", "fg") 
    .Replace("fg", "fguhCool"); 

OBS:。単語全体(つまり、それらの単語がではなく、より大きい単語の部分文字列である)を心配している場合は、@ Joeyの答えを参照してください(この場合、単純な置換は行われません、正規表現は本当に最適です)。

3

私はこれが宿題であり、あなたが仕事をするコードではなく特定のアルゴリズムをテストしていると仮定します。

これはあなたの先生は心の中で持っているものはおそらくです:

学生は「FGU」そして、コードは最初に「fguh」をチェックする必要があることを、その後、「FG」を実現します。あなたが気付いたように、 "fg"を置き換えることは "fguh"を破壊するので、順序は重要です。

これはif-else条件を持つループとして実装されることがあります。そのため、すでに置き換えられた "fguhCool"内の "fg"を置き換えることはありません。

しかし、 "fg"と "fgu"が両方とも同じ文字列内にある場合、アルゴリズムは分解されます。 "fgu"の存在を許可することはできません。文字列の別の部分で "fg"をチェックするのを防ぎます。

"fgu"、 "fgu"、 "fg"の順に見つけて、 "fg"が含まれていない中間文字列に置き換えてください。 。それから、その中間文字列を検索し、それを "fguhCool"に置き換えることができます。

関連する問題