2013-06-30 20 views
44

Hızlı soru: İki yakalama grubu veren bir regexp, ^(?:\b[A-Z]+\b\s+)+(.*)\d{8} var. Yakalama grubu 1'i bir boşlukla değiştirmek istiyorum. Mümkün mü?Regexp yakalama grubunu Notepad ++ içinde değiştirin.

\1 ile değiştirirseniz TEST TESTER Hello, world. Another word here. 75793250 ->Hello, world. Another word here ile değiştirir. Bu sonucu istiyorum: TEST TESTER 75793250. \1'un bir boşluk ile değiştirilmesi.

+3

Um, gördüğüm kadarıyla tek bir yakalama grubu var mı? '(?: ...)' yakalama dışı bir gruptur. – Jerry

+0

İki, 0 ve 1 olduğunu düşündüm? Grup 0 tam olarak mı? Neyse, Notepad ++ 1'in bir boşluk ile çağırdığı grubu değiştirmek istiyorum. – Kaah

+0

Eğer yerine aşağıdakileri koyarsam: '\ 1',' TEST TESTER'ünün yerine geçer Merhaba, dünya. Burada başka bir kelime. 75793250' -> 'ile Merhaba, dünya. Burada başka bir kelime var. Bu sonucu istiyorum: 'TEST TESTER 75793250'. '\ 1 'bir boşluk ile değiştiriliyor. – Kaah

cevap

74

kullanmayı deneyin:

^((?:\b[A-Z]+\b\s+)+)(?:.*)(\d{8}) 

Ve ile değiştirin:

\1\2 
+0

Mükemmel çalıştı! :) – Kaah

+1

@Kaah Hoşgeldin! :) Ayrıca, not defteri sürümümü güncellememi hatırlattı! XD üzerinde 6.1.8 vardı – Jerry

7

Bunu neden yaptınız? ^(\b[A-Z]+\b\s+)+(?:.*)(\d{8})

ile değiştirin:

o

Regex bu şekilde yapın \1 \2

+0

Teşekkürler, ancak Notepad ++ 6.3.3'te 'Geçersiz normal ifade' verir. Lütfen Anirudh'u gözden geçirin. – Kaah

+1

@Kaah oops..corrected .. – Anirudha

+0

Bu regex, 'TESTER 75793250' değerini döndürecek ve tekrarlanan bir grubu yakalayacağınız zaman sadece size ait olan son diziyi verecektir. Başka bir örnek: 'abcd dizgesini' regex '(.) +' Ve '\ 1 'dizesiyle değiştirmek' d' dize ile sonuçlanacaktır – steve9164