2016-11-19 6 views
0

現在、基本的なプログラムで作業していますが、文字列変数の選択に問題があります。すべての変数は_で始まり、関連する文字列が続きます。ファイルから文字列変数をフィルタリングして変更する

+0

あなたは各行を文字列配列として保存し、 'text []。split(区切り文字)'を実行し、各要素を解析/分割して格納します区切り文字は別の配列で作業できますか? –

+0

ファイルはどのように構造化されていますか?各行は次のようになります: '_variableName関連するテキスト'?次の行と同じようなものです。あなたは入力と期待される出力の例を挙げることができますか?私はこれが 'String.Split'メソッドを使って非常に簡単に解決できると思います –

答えて

2

まず_inputマッチします、あなたが代わりに一度保存し、すべての置換を行うことができ、ファイル全体を読み込み、各ラインを通過するループ内で再びそれを保存する必要はありません。

置き換えの場合は、正規表現置換を使用できます。私は、テキスト上で行うために探している変換の種類わからないんだけど、あなたは(この例では、私はちょうど大文字にテキストを変換しています)は、次のような何かを行うことができます。代わりに

string[] textLines = File.ReadAllLines(@"c:\Users\Darren\Desktop\Hello.txt"); 
var results = new List<string>(); 

foreach(var line in textLines) 
{ 
    var result = Regex.Replace(line, @"_(.*)\s", match => 
     { 
      return $"~{match.Groups[1].Value.ToUpper()} "; 
     }); 
    results.Add(result); 
} 
File.WriteAllLines(@"c:\Users\Darren\Desktop\newHello.txt", results.ToArray()); 

return $"~{match.Groups[1].Value.ToUpper()} ";の場合は、テキストを目的の方法で変換するコードを配置できます。 match.Groups[1].Valueは、_の後のテキストとスペースの前のテキストを含む

-1

このコードはすべて間違っていますが、私はこのコードをより効率的にすることに集中します。さらに邪魔することなく、あなたの目標は、特定の文字の権利の後に単語を見つけることです?文字を取っておくと、次の文字が空の文字列であるときに停止します

var index = input.IndexOf("_"); 
var newString = new string(input[index].TakeWhile(m=>m!=' ').ToArray()); 

簡単な解決策は、に沿って何かです。これは1つの方法です。これは1つの変数と1つの単語に対してのみ機能するため、その使用法は非常に限定されています。

これに対処する2番目の方法は、正規表現の文字列を使用して一致を使用して置き換えます。基本的な文字列は_それへの次の単語が続くと一致します

_([a-z])\w+ 

ようなものになるだろう、あなたはさらにあなたが望む金額を追跡するために、{1、n}は使用してそれを改善することができ、例えば、

_([a-z])\w+ {1,3} 

が_hello

関連する問題