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.