2011-07-05 38 views
0

私はこのようになります文字列を持っている:長い文字列から文字列を解析する最も良い方法は何ですか?

"/dir/location/test-load-ABCD.p" 

と私は「ABCD」を行う解析する必要がある(ABCDが毎日異なる値になります)

私はその意志を知っている唯一のものを常に(構文解析するためのロジックに使用する)一貫していること:

  1. 常に常に値の前に 『テスト・ロード - 』があるであろう価値
  2. 後に「.P」が存在することになります。私が考える

物事は何とか「.P」のケースを取るようにして、

.Replace("test-load-", "") 

を行うために(「/」最後の過去のすべてを取得し、その後、最後の2つの文字を削除しましたそれはので、私は、人々がよりエレガントな解決策上の任意の提案を持っていたかどうかを確認したかった種類のハック感じた

答えて

7

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

ボーナス
は、おそらく次の

DateTime date = DateTime.ParseExact(part, "yyyy-MM-dd", CultureInfo.InvariantCulture); 
0

これはファイル名であるので、フレームワークによって提供される機能を解析し、ファイル名を使用します。

var fileName = System.IO.Path.GetFileNameWithoutExtension("/dir/location/test-load-ABCD.p"); 
string result = fileName.Replace("test-load-", ""); 

Replaceを使用するよりも「ハックの少ない」ソリューションは、ソリューションをキャプチャするための正規表現の使用になりますが、この場合、これは過度のことだと思います。 、追加回復力について

static readonly Regex parser = new Regex(@"/test-load-(.+)\.p"); 

string part = parser.Match(str).Groups[1].Value; 

その部分に表示できる文字のみを含む文字クラスに.+を置き換える:

+1

'Path.GetFileNameWithoutExtension' – SLaks

+0

@SLaksはすでに気づいて固定します。 –

+1

@ Konrad Rudolph - FileInfoはこれが実際のファイルであることを実際にチェックしていますが、実際のファイルに実際にはマッピングされていません。 – leora

0
string input = "/dir/location/test-load-ABCD.p"; 

Regex.Match(input, @"test-load-([a-zA-Z]+)\.p$").Groups[1].Value 
関連する問題