2011-10-12 32 views
6

Benim kullanıcıların biçimi belgelereDüzenli ifadeler karakter tekrarlarını bulabilir mi?

________________________ 
************************ 
------------------------ 
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥ 

gibi dizileri eklemek (benim kullanıcılar hakkında sorma bana!). Ve parçacıkları parçalarını görüntülerken kötü görünüyor. Herhangi bir karakterin tekrarlarını nasıl kaldırabilirim? Tek tek filtreler ekleyebilirim, ama sürekli bir kedi ve fare oyunu olacak.

Düzenli bir ifade bu filtreleyebilir mi?

cevap

10

deneyin şey. Diliniz regex desenleri için dizeleri kullanıyorsa \ 'ndan kurtulmayı unutmayın!

python'da
+2

+ 1, ama '[^ a-z-0-9] 'yerine' arasında kullanmak .' –

5

Böyle bunların yazım (balon, yazım harfleri katına çıktı kelimeler olarak,

Ancak bu aynı zamanda meşru kullanımlarını yakalayacak (.)\1+ gibi basit bir regex ile herhangi bir karakterin tekrarları kaldırabilir, kuyu, vb).

Yani, kullanıcılarınız yeni karakterler buldukça, zaman zaman değişiklik yapmak zorunda kalmamak için, ifadeyi izin verilmeyen bazı karakterlerle kısıtlamak isteyebilirsiniz. kullanmak. Bazı kullanıcılarınız aslında karar verebilir gibi bu bile her durumda kesin bir çözüm değildir

([^A-Za-z0-9])\1+

Ama:
Olası bir çözüm tekrarlanan harf olmayan ve non-sayı karakterleri izin vermemek olacaktır sınırlayıcı olarak fiili harf dizilerini kullanın:

ZZZZZZZZZZZZZZZZZZZZZZ 
BBBBBBBBBBBBBBBBBBBBBB 
ZZZZZZZZZZZZZZZZZZZZZZ 

amacıyla buna izin ve (örneğin üç nokta gibi: ...) bazı tekrarlanan harf olmayan karakterlerin meşru kullanımlarını sağlayan yararı ile değil, yapabilirsin karakter tekrarlarını maksimum ile sınırla of 3, (<pattern>)\1{min, max} sözdizimi ile bir regex kullanarak: (.)\1{4,}, en az 4 uzunluğu ve belirtilmemiş bir maksimum ile, rahatsız edici karakter dizileri eşleştirmek için. herhangi bir karakter ve sonra 5 ya da bu karakterin daha eşleşir

(.)\1{5,} 

: gibi

1

(ama mantık ne olursa olsun dil aynıdır): Bu, bazı yerine ne kontrol ve yok ne var avantaja sahiptir

>>> import re 
>>> text = ''' 
... This is some text 
... ________________________ 
... This some more 
... ♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥ 
... Truly the last line 
... ''' 
>>> print re.sub(r'[_♥]{2,}', '', text) #this is the core (regexp) 

This is some text 

This some more 

Truly the last line 

(örneğin değil isteyebilirsiniz . o This is still to do... gibi bir yorumun bir parçası olabilir olarak . yerine

DÜZENLEME: En tekrarlar her zaman ise

"çizgiler" yeni satır c ekleyebilirsiniz daki ifade haracters:

text = ''' 
This is some text 
________________________ 
This some more 
♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥ 
Truly the last line 
But this is not to be changed: ♥♥♥ 
''' 
>>> print re.sub(r'\n[_♥]{2,}\n', '\n', text) 
This is some text 
This some more 
Truly the last line 
But this is not to be changed: ♥♥♥ 

HTH

İlgili konular