2014-12-21 16 views
8

Ben yani mekanlara - çizgi hariç tüm \W değil harflerin yerine istiyorum:Düzenli ifadeyle '-' (tire) dışında tüm W (harfleri yok) nasıl değiştirilir?

  1. black-whiteblack-white
  2. black#white ben çok iyi normal ifade biliyoruz black white

verecek verecek ama ben Bununla nasıl baş edeceğine dair bir fikriniz yok.

böylece [a-zA-Z] yalnızca İngilizce gibi değil \w olduğunu ben Unicode kullanmak istediğiniz düşünün. Python yeniden sözdizimini tercih ettiğimi ancak diğer önerileri okuyabildiğimi düşünün. negatif karakter sınıfını kullanma

cevap

11

: (\W[^\w] eşdeğerdir; - hariç [^-\w] =>\W)

>>> re.sub(r'[^-\w]', ' ', 'black-white') 
'black-white' 
>>> re.sub(r'[^-\w]', ' ', 'black#white') 
'black white' 

Eğer regex paketini kullanırsanız, nested sets, set operations kullanabilirsiniz:

>>> import regex 
>>> print regex.sub(r'(?V1)[\W--[-]]', ' ', 'black-white') 
black-white 
>>> print regex.sub(r'(?V1)[\W--[-]]', ' ', 'black#white') 
black white 
+0

ben şimdi test edecek basit ve iyi görünüyor. – Chameleon

1

ben ediyorum aşağıdaki gibi negative lookahead kullanın,

>>> re.sub(r'(?!-)\W', r' ', 'black-white') 
'black-white' 
>>> re.sub(r'(?!-)\W', r' ', 'black#white') 
'black white' 

(?!-)\W başında Negatif ilerleme biz maç için gidiyoruz karakter ama tire - ait \W (sözcük olmayan karakter listesi) herhangi olacağı yönünde görüş. Bu Çıkarma bir tür gibi, bu \W - character present inside the negative lookahead (yani. Tire) 'dir.

DEMO

+0

ayrıca 'kullanabiliriz - (* ATLAMA) (* F) | \ W' https://regex101.com/r/sS1qO8/3 ama regex modülü bunu desteklemek için başarısız olur. –

+0

Daha iyi kelime bölme yapmak için güzel bir fikir. – Chameleon

İlgili konular