2010-11-25 16 views
4

文字列を処理するにはC#RegExを使用する必要があります。アイデアは、部分文字列のように、イニシャルの文字列を削除することです。正規表現C#

例文字列:= "04 | aH 800 A574a C.R.";

結果は "H 800 A574a C.R"である必要があります。

しかし、パトロンは、文字列ができるため、変数である前にあるものを無視して| |「×」「4 aProtestasのポプラレス」と結果が

要約「をProtestasはポプラレス」である必要があり、私は後に部分文字列を必要としますこの表現。

おかげで...

PD:私の英語による申し訳ありません:S

+0

Quéno te preocupes、tío。 – tchrist

答えて

4
var stringNew = Regex.Replace(stringOld, @"^.*?\|.", ""); 

これは何.*?を含む文字列^

  • の開始時に

    • すべてを削除します
    • パイプで終了|
    • プラス文字列は常にそれの後パイプと1つの文字を持っている場合.
  • +0

    後でどこかで追加のパイプがある場合に備えて、おそらく '。*'をレイジーにするべきです。 – Jens

    +0

    @Jens、良い点、ありがとう。私の答えを変更しました。 – Heinzi

    +0

    もう一つの改良点は '。*?'の代わりに '[^ |] *'を使うことです。これは非 '|'文字と明示的にマッチするので、最初の '|'で停止することが保証されていますので、遅れをとる必要はありません。 –

    2

    を次のいずれかの文字、そしてあなたが残しておきたいものを、あなただけString.IndexOf()を使用することができます。 1つの文字列メソッドを使用すると、RegExオブジェクトを使用するほうがはるかに高速になります。 "| X" という名前のグループは後に与えられる '欲しかった'

    (\|)[a-zA-Z](?<wanted>[\s\S]+)$ 
    

    string str = "04|aH 800 A574a C.R."; 
    int nIndex = str.IndexOf('|') + 2; 
    string substr = str.Substring(nIndex); // contains "H 800 A574a C.R." 
    
    0

    この正規表現は、あなたの望ましい結果を提供します。