Notepad ++ regex bitişik kimlikleri bulma / değiştirme


2

Bu gibi görünen bir csv dosyası var:

ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,

Sadece notepad++kimlikleri kendi satırlarına taşımak ve aynı satırdakileri en alta kopyalamak için kullanmam gerekiyor . Bu yüzden ideal olarak nihai çıktı şöyle görünür:

ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,,methyltransferase activity,F,
GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,

Değiştirme işlevini kullanmayı denedim, kimliklerini hemen yan yana kullanarak ID örneklerini buldum (\w+:\d+),(\w+:\d+),(.*),[A-Z]ve ile değiştirdim $1,$3,$4\r$2,$3,$4.

Ancak, bu örnekleri her denediğimde ve "bulduğumda" notepad++tüm listeyi aydınlatacak ve komut çalışmaz.

Bu konuda pek tecrübeli değilim, bu yüzden biri bana yardım edebilirse minnettar olurum! Teşekkür ederim!

orijinal dosya: http://www.geneontology.org/doc/GO.terms_alt_ids

Başlıktan kurtuldum ve tüm sekmeleri virgül ile değiştirerek csv'ye dönüştürdüm.

Yanıtlar:


1

CSV’de Tekrarlanan Kimlikleri Bul / Değiştir

Kullandığım tamamen optimize edilmemiş fakat işlevsel regex:

(GO:[\d]+),(GO:[\d]+)(.*)

ile değiştirerek:

$1$3\n$2$3

Çıktının verilmesi:

ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,methyltransferase activity,F,
GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,

Bunun , arzu edilmek yerine, bir yan etki olabileceğini düşündüğüm gibi, virgülün istediğiniz çıktıda çoğaltılmadığını unutmayın .

Çoğaltılmış virgül isteniyorsa, şunu kullanın:

$1,$3\n$2$3

Bunun yerine yedek olarak.

açıklama

(GO:[\d]+)- 1. yakalama grubu, değişmez "GO:" ile eşleşir, ardından bir veya daha fazla rakam ( $1)

, - eş anlamlı virgülle eşleş (yinelenen kimlikleri tespit etmek / yinelenmeyenleri yoksaymak için kullanılır)

(GO:[\d]+)- 2. yakalama grubu, ilk olarak aynı! ( $2)

(.*)- 3. yakalama grubu, "herhangi bir şeyin" 0 veya daha fazlasını eşleştirin - burada "satırın geri kalanı" için kısayol ( $3)

$1$3\n$2$3- kimliği ve 1ardından kalan satırı yazdır ; sonra bir yeni satır; baskı kimliği ve 2ardından kalan satır

Uyarı

Yukarıdaki normal ifadenin çalışması için arama seçeneğinin . matches newlinedevre dışı bırakılması gerektiğini unutmayın . Aksi takdirde, 3. yakalama grubu çok fazla eşleşir.

nokta newline ile eşleşiyor


Teşekkür ederim! Yakın olduğumu hissediyorum, bu metni düzenlemeyi yavaş yavaş öğrendim ve her zaman sorunlara kapıldım. İyi günler
— kevluv93

Benim için zevk, iyi şanslar, sen de :) PS regex101 bu tür şeyler için arkadaşın!
— bertieb

Doğru cevabı vermiş olmama rağmen, bunu yapmaktan nefret ediyorum. Farkında değildim, ancak bu işlev yinelenen kimliklerin örnekleri altındaki her şeyi kopyalayıp tekrar ve tekrar yapıştırıyor. Tek bir satırda (. *) Sonunu yapmanın bir yolu var mı?
— kevluv93

@ kevluv93 EoL'de $sonlandırmak için bulma bölümünün sonuna bir ekleyin (ki bu benim testimde yapıldığı , ancak açıkça gerçek testler> küçük örnek veriler!) yani (GO:[\d]+),(GO:[\d]+)(.*)$. Ayrıca ^, eksiksiz ^(GO:[\d]+),(GO:[\d]+)(.*)$
— olmaları

Bu emri hala işe alamıyor gibiyim. Yinelenen kimlik örnekleri altında her veri noktasını hala seçiyor.
— kevluv93
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.