5

どうすれば|ADT^A05|抜け出せますか

"MSH|^~\&|PHTADT09|ABC|DADIST00|ABC|20120425152829|rcalini1|ADT^A05|20429208851634|P|2.1|560"

私はこれを試しましたが、動作しません

"|([A-Z]{3})^([A-Z]{1})([0-9]{2})|"
4

4 に答える 4

5

次のような区切り文字がある場合、正規表現は必要ないと思います|

var adt = text.Split('|')[8];

HL7形式の定義を参照してください

メッセージ内の各セグメントはコンポジットまたはフィールドに分割され、フィールドはパイプ文字 ('|') で区切られます。

于 2012-12-12T21:38:30.720 に答える
4

|and^は正規表現の特殊文字であるため、エスケープする必要があります。

@"\|([A-Z]{3})\^([A-Z]{1})([0-9]{2})\|"

または、逐語的なリテラルが気に入らない場合は、次のようにします。

"\\|([A-Z]{3})\\^([A-Z]{1})([0-9]{2})\\|"

逐語的なリテラル (@開始引用符の前に使用) により、正規表現が大幅に読みやすくなります (そして移植性が向上します。その正規表現をコピーして別の場所に貼り付けることができます)。よほどの理由がない限り、正規表現文字列には常にそのままのリテラルを使用する必要があります。

于 2012-12-12T21:39:56.583 に答える
2

特定の文字の前にバックスラッシュを置きます:|および^.

\|([A-Z]{3})\^([A-Z]{1})([0-9]{2})\|

編集:私のお気に入りのサイト - http://regexpal.com/

于 2012-12-12T21:37:49.610 に答える
1

BizTalk にアクセスできる場合、Microsoft は、メッセージを XML に分割するHL7 のアクセラレータを提供しています。それ以外の場合は、LBの答えを使用して、文字列を直接分割します。

于 2012-12-12T22:03:07.257 に答える