正規表現を使用して括弧で囲まれた頭字語の完全な形式を見つける

正規表現を使用して括弧で囲まれた頭字語の完全な形式を見つける

テキスト内で括弧を使用して指定されている頭字語の完全な形式を見つけようとしています。

次に例を示します。

がんにおける主要なエピジェネティック変化の1つである異常なDNAメチル化は、大腸がん(CRC)のサブセット、いわゆるCpGアイランドメチル化表現型(CIMP)に蓄積することが報告されており、これはマイクロサテライト減少不安定性(MSI)の高いCRCと相関することが知られています。

ここでは、次のような短縮形/完全形の出現リストを作成できるようにしたいと考えています。

CRC - 大腸がん

CIMP - CpGアイランドメチル化表現型

MSI - マイクロ衛星の不安定性を低減

問題は、 を使用して括弧で囲まれたすべてのエンティティを見つけることはできたもののre.findall('(\(.*?\))', s)、対応する完全形式を見つけることが困難であることが判明したことです。

このような完全形がすべて括弧の左側にあると仮定すると、次のものを使用します。2括弧内の略語の完全形を取得するための条件-

  • 単語数は 3+|SF| 以下でなければなりません。ここで、|SF| は短縮形の文字数です (マイクロ衛星低不安定性 (MSI) - ここでは完全形は 4 単語ですが、短縮形は 3 文字です)
  • 完全形式の最初の単語は短縮形式の最初の文字で始まります (例:c直腸がん(crc))

の現在の理解では、上記の 2 つの条件を解決し、テキスト内のそのようなケースをすべて見つける をregex書くことができませんでした。regex

これについていくつかアドバイスをいただけませんか?

答え1

Python を使用していると仮定します:

((\w)\w* )(\w* ){0,3}\((?i)(\2)[^)]*\)

これは、グループ 2 の単語の最初の文字をキャプチャします。この単語の後に 0 ~ 3 個の単語が続きます (適切な場合は数を増やします)。すべての単語はリテラル スペースで区切られます。次に開き括弧があり、その後にグループ 2 でキャプチャされた文字が続きます。この文字は大文字と小文字を区別しません。この後に、括弧パターンの残りが続きます。

単語数と頭字語の文字数を一致させることができなかったため、条件の 1 つが満たされていません。

私のコメントは悲観的すぎました。しかし、多くのナンセンスをキャッチするでしょう。

regex101.com でテスト済み

ちなみに、括弧のパターンを微調整して を使用することもできます\([^)]*\)。貪欲な乗数を持つ否定文字は後方参照を必要としないため、プロセスはより高速に実行されます。

関連情報