2015-10-14 20 views
5

Aşağıdaki normal ifadede, dizedeki her karakterin bir 'X' ile değiştirilmesini isterim, ancak çalışmıyor. Python 2.7 olarak[a-zA-Z] Python regex modeli ASCII olmayan Unicode karakterleriyle eşleşecek ve değiştirilebilecek mi?

:

>>> import re 
>>> re.sub(u"[a-zA-Z]","X","dfäg") 
'XX\xc3\xa4X' 

veya Python 3.4 olarak

>>> re.sub("[a-zA-Z]","X","dfäg",re.UNICODE) 
u'XX\xe4X' 

:

>>> re.sub("[a-zA-Z]","X","dfäg") 
'XXäX' 

mi mümkün için nedense 'yapılandırmak' [a-zA-Z] 'ä', 'ü' vb. Bu yapılamazsa, her zamanki 'tam alfabe' aralığında Unicode karakterler içerecek şekilde köşeli parantezler arasında benzer bir karakter aralığı deseni nasıl oluşturabilirim? Demek istediğim, Almanca gibi bir dilde, 'ä' alfabede 'a' yakın bir yere yerleştirilecekti, bu yüzden 'a-z' serisine dahil edilmesini bekliyordu.

+0

Kullanımı '\ w', bu yeterli olacaktır. –

+0

Soruyu doğru bir şekilde anlayabiliyorsam, '\ w'' [A-Za-z] 'kümesinde olmayan tüm harfleri hariç tutacaktır. Denedim [burada] (https://regex101.com/r/rR2hZ1/1). – npinti

+0

@npinti: Unicode değiştiricisiyle [aksanlı harfle eşleşir] (https://regex101.com/r/rR2hZ1/2). –

cevap

4

Unicode değiştirici ile

(?![\d_])\w 

kullanabilir. (?![\d_]) ileriye dönük görünüm, herhangi bir basamakla (\d) veya alt çizgi ile eşleşemediğinden \w shorthand sınıfını kısıtlıyor.

regex demo

A Python 3 demo bakınız:

import re 
print (re.sub(r"(?![\d_])\w","X","dfäg")) 
# => XXXX 

Python 2 gelince:

# -*- coding: utf-8 -*- 
import re 
s = "dfäg" 
w = re.sub(ur'(?![\d_])\w', u'X', s.decode('utf8'), 0, re.UNICODE).encode("utf8") 
print(w) 
+1

Sadece bir not: Windows'ta, Python 2.x'te, kaynak için UTF8 kodlamasını zorlamak için '# kodlama: utf-8' komutu eklenebilir. –

İlgili konular