Regex kullanarak parantez içindeki kısaltma tam formunu bulma


2

Parantez kullanarak bir metinde belirtilen kısaltmalar tam olarak bulmaya çalışıyorum.

İşte bir örnek:

Kanserdeki başlıca epigenetik değişikliklerden biri olan Aberrant DNA metilasyonunun, mikro uydu azaltılmış instabilite ile korele olduğu bilinen CpG ada metilat fenotipi (CIMP) olarak adlandırılan bir kolorektal kanser alt kümesinde (CRC) biriktiği rapor edilmiştir. MSI) -yüksek CRC

Burada şöyle bir kısa form / tam form oluşum listesi oluşturabilmek istiyorum:

CRC - Kolorektal Kanser

CIMP - CpG adası metilatörü fenotipi

MSI - mikro uydu kararsızlığı azalttı

Mesele şu ki kullanarak parantez içindeki bütün parçaları bulabildim re.findall('(\(.*?\))', s), fakat karşılık gelen tam formu bulmak zor.

Bu tür tüm formların parantezin sol tarafında olduğunu varsayarak, parantez içindeki kısaltmanın tam halini yakalamak için aşağıdaki 2 koşulu kullanmak istiyorum.

  • kelime sayısı en fazla 3+ | SF | nerede | SF | Kısa biçimdeki karakter sayısıdır (mikro uydu azaltılmış kararsızlık (MSI) - burada tam biçim 4 sözcük, kısa biçim 3 karakterdir)
  • Tam formun ilk kelimesi, kısa formun ilk karakteriyle başlar (örneğin, c. Omurek kanseri ( c rc)).

Şimdiki anlayışıma göre regex, regexyukarıdaki 2 koşulu çözen ve bu gibi tüm vakaları metinde bulan bir yazı yazamadım .

Lütfen bana bunun için bazı öneriler verebilir misiniz?

Yanıtlar:


1

Python kullandığınızı varsayarsak:

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

Bu, grup 2'deki bir kelimenin ilk karakterini yakalar. Bu kelimeyi sıfırdan üç kelimeye kadar izler (eğer uygunsa sayıyı arttır). Tüm kelimeler değişmez bir boşlukla sınırlandırılmıştır. Daha sonra açık bir parantez, ardından grup 2'de yakalanan mektubu takip eden harf duyarsız. Bütün bunlar braket kalıbının geri kalanı takip edilir.

Kelime sayısını kısaltmanın karakter sayısıyla eşleştiremedim, bu yüzden koşullarınızdan biri karşılanamadı.

Yorumlarım çok karamsardı. Ama çok saçmalık yakalayacaktır.

Regex101.com sitesinde test edilmiştir

Bu arada, braket desenini ince ayarlayabilir ve kullanabilirsiniz \([^)]*\). Açgözlü çarpanı olan olumsuz karakterler geri dönüşüme ihtiyaç duymaz, bu nedenle işlem daha hızlı çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.