0

Regex を使用して文字列をフィルター処理しようとしています。文字列から組み合わせをフィルター処理し、いくつかの Seperate も除外したいのですPが、提供される文字列には、次のようなテキストの一部もあります: PB00121324、それを保持したいP.

これは文字列です:

PB014EC8F;1359300102;NL1200000001 ;Ey³ PÑ PÑ B014EC8F;1359 P B014EC8F;1359

除外したい:Pを分離

したがって、出力は次のようになります。

PB014EC8F;1359300102;NL1200000001 ;Ey³

私は今このコードを使用しています:

string CleanString = Regex.Replace(DirtyString, @"[\\PÑ?]", "");

問題は、次の結果になることです。

B014EC8F;1359300102;NL1200000001 ;Ey³

これの代わりに:

PB014EC8F;1359300102;NL1200000001 ;Ey³

これの正規表現を知っている人はいますか?

前もって感謝します!

4

2 に答える 2

4

を使用\bして単語の境界を見つけることができるため、たとえば、正規表現\bP\bは aPを分離して見つけます。

\bP\b...

入力Hello P Goodbye->Pスペース (単語以外の文字) に隣接しているため一致します。

入力HelloP Goodbye->P前の単語に隣接しているため一致しません

入力Hello.P.Hello->P単語以外の文字に隣接しているため一致

入力P Hello->Pは、文字列の先頭とスペースに隣接しているため一致します。

以下のコメントへの回答 - 最初の正規表現[..]が2つのピリオド/ピリオドを見つけることを意図している場合、これはそれが行うことではありません。[]は文字クラスを示し、文字クラスに重複する文字を指定しても意味がありません。2 つのピリオドを一致させるには\.\.

実行順序が非常に重要であるため、1 つの正規表現に結合できるかどうかはわかりません...

Hello..P..S単独で P です。ただし、 を削除すると、..これHelloPSは単独では P ではありません。複数の置換を組み合わせるのは簡単ですが、現在のメソッドが1つを実行し、次に次を実行しているのに対し、それらはすべて「同時に」効果的に発生します。すなわち - 入力はその都度異なります。

ただし、置換を組み合わせるには...

 string cleanData = 
 Regex.Replace(DisplayText, @"(\.\.|\bPÑ?\b| )", ""); //untested :)

デモの並べ替え

于 2013-02-05T10:03:17.017 に答える
2

次の正規表現を試してください。

\bPÑ?\b

入力:

PB014EC8F;1359300102;NL1200000001 P ;Ey³ PÑ PÑ

出力:

PB014EC8F;1359300102;NL1200000001  ;Ey³  
于 2013-02-05T10:07:17.300 に答える