2016-04-03 13 views
-2

Bir numune Metin abc 4-Char dize ", " dışında herhangi bir uzunlukta (.*) her bir dize olabilir
"abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "
olup. Benim test içinRegEx ile bir metindeki bir dizenin her x-th oluşumu nasıl değiştirilir?

arama iğne dört karakter ", "
ve her 4. oluşumu ben
(([^(", ")]*", "[^(", ")]*){3})", "
ve
((.*", ".*){3})", "

ile geldi


değiştirilmesi gereken
olduğu Her ikisi de regex arama kullanıldığında notepad içinde çalışmıyor. (Ben sadece onları tarayıcı kazı-kazanında denemedim görüyorum. Ama yine de regex-vadeli benim hatadan şüpheleniyorum.)

Değiştirme için denedim $1", \n".

Doğru şartlar ve doğru yer değiştirme nedir?

Bonus soru :)
Arama nasıl iğnenin " iğnenin önümüzdeki 4 Görünme sayım için kullanılacağını, elde etmek için?

Belki başka açıklaması:

addLineBreaksToLongString(a="text",b="-, -",k=3,d=3) { 
// a the String, b signal string to break at, k number of letters of b to keep on old line, d only break at every d-th occurence of b 


(Ben bir javascript fonksiyonu bunu başarmak için yazdım Yani gerek bir gönderme zaman koymak çok daha hızlı için çünkü benim regex yazma geliştirmek istiyorum.. tek durumlarda kullanın)

+0

Notepad ++'da tam olarak sorun nedir? Atm düşünebildiğim tek şey, notepad ++ değiştirme kaçan karakterleri gibi olmayabilir. –

+0

Neden burayı burada denemiyorsun ?: https://regex101.com/r/cU5lC2/1#javascript – John

cevap

0

Sonunda bu işleri:

((.*?", "){3}.*?)", " 

ve değiştirme

$1", \n" 

Bu ++ not defteri çalıştığından da.

.* kullanım [\S\s]* yerine de yeni hat karakterleri eşleştirmek için: muhtemelen kullanılan regex motora bağlı olarak, yeni satır karakterleriyle uymuyor

(([\S\s]*?", "){3}[\S\s]*?)", "

.* olarak.

1

Bu regex 1 $ her dördüncü ", " yakalar.

".+?", ".+?", ".+?", ".+?(", ")

Çok fazla yemediğinden emin olmak için tembel .+?'u kullanır. Notepad ++ ile

+0

@John bir dahaki sefere daha spesifik ol ... – Laurel

+0

@John Bu çirkin ama şimdi çalışıyor. – Laurel

1

:

arama: (?:("[^\\"]*+(?:\\.[^\\"]*)*+"):(?1),\K){4}
değiştirin: \n

desen çift tırnak kaçmış ve geçen boşluk Döşeme destekler.

+1

@John: tuhaf, Yorum yazdığınız dizeyle notepad ++ (6.8.3) ile test ettim ve iyi çalışıyor. –

+1

@John, çünkü burada bir boşluk eksik: '' uzay-etrafında '', 'yakut-pozisyon': '(ancak bunu isteğe bağlı olarak kolayca yapabilirsiniz) –