2

Title:Code ペアを取得するために正規表現を使用しようとしています。

(.*?\(CPT-.*?\)|.*?\(ICD-.*?\))

データ:

感覚神経性難聴 両耳性 (軽度) (ICD-389.18) 右手首ガングリオン嚢胞 (ICD-727.41) 左肩関節へのデポ メドロールの S/P 注射 (CPT-20600)

キャプチャしたい:

  • 感覚神経性難聴 両耳性 (軽度) (ICD-389.18)
  • 右手首ガングリオン嚢胞 (ICD-727.41)
  • 左肩関節へのデポ メドロールの S/P 注射 (CPT-20600)

使用する適切な正規表現は何ですか?

4

3 に答える 3

4

次のようなパターンはどうでしょうか。

.*?\((CPT|ICD)-[A-Z0-9.]+\)

これは、任意の 0 個以上の任意の文字に非貪欲に一致し、その後に a(が続き、その後にCPTまたはICDが続き、その後にハイフンが続き、その後に 1 つ以上の大文字のラテン文字、10 進数またはピリオドが続き、その後に).

[A-Z0-9.]+私の理解では、現在のすべてのICD-9 コードICD-10 コード、およびCPT コードはそのパターンに準拠しているため、選択したことに注意してください。

C# コードは次のようになります。

var result = Regex.Matches(input, @".*?\((CPT|ICD)-[A-Z0-9.]+\)")
                  .Cast<Match>()
                  .Select(m => m.Value);

周囲の空白を避けたい場合は、単に結果の文字列 ( ) を削除するか、次のように aを前にm => m.Value.Trim()置いて、一致するプレフィックスが空白以外の文字で始まるようにします。\S

var result = Regex.Matches(input, @"\S.*?\((CPT|ICD)-[A-Z0-9.]+\)")
                  .Cast<Match>()
                  .Select(m => m.Value);

または、次のような入力を処理する必要がある場合は、否定先読みを使用します(ICD-100)(ICD-200)

var result = Regex.Matches(input, @"(?!\s).*?\((CPT|ICD)-[A-Z0-9.]+\)")
                  .Cast<Match>()
                  .Select(m => m.Value);

ここで実際のデモを見ることができます。

于 2013-11-14T18:44:01.523 に答える
0

次の正規表現を検討してください...

.*?\d\)

幸運を!

于 2013-11-14T18:51:52.027 に答える