2015-01-14 5 views
8

w Perlu s/[^\w:]//g zastąpiłby wszystkie Pomieszczenia znaków alfanumerycznych wyjątkiem:Wymień niż znaki alfanumeryczne poza pewnymi wyjątkami pytona

W Pythonie Używam re.sub(r'\W+', '',mystring) który ma usunąć wszystkie non alfanumeryczne oprócz _ podkreślenia. Czy istnieje sposób na wprowadzenie wyjątków, nie chcę zastępować znaków takich jak = i.

Wcześniej byłem zastosowanie innej metody tj zastąpić wszystkie niechciane znaki za pomocą re.sub('[[email protected]#\'\" $()]”,«», mystring`) jednak, że nie jest możliwe dla mnie, aby przewidzieć, co wszystkie znaki mogą przyjść mystring stąd Chcę usunąć wszystkie znaki alfanumeryczne poza kilkoma.

Firma Google nie udzieliła odpowiedniej odpowiedzi. Najbliższe wyszukiwanie to python regex split any \W+ with some exceptions, ale to też nie pomogło mi.

Odpowiedz

7

Możesz określić wszystko, co nie musi zostać usunięte w negowanych klasach znaków.

re.sub(r'[^\w'+removelist+']', '',mystring) 

test

>>> import re 
>>> removelist = "=." 
>>> mystring = "[email protected]#$" 
>>> re.sub(r'[^\w'+removelist+']', '',mystring) 
'asdf1234=.' 

Tutaj zmienna removelist jest ciągiem znaków, który zawiera listę wszystkich znaków, które należy wykluczyć z usuwania.

Co zanegowane klasę postaci oznacza

Gdy ^ zostanie przeniesiony do klasy postaci to nie działa jak kotwica, gdzie jak to neguje klasę postaci.

To jest ^ wewnątrz klasy postaci powiedzmy, jak [^abc] neguje to znaczenie klasy postaci.

Na przykład [abc] dopasuje ab lub c gdzie jako [^abc] nie będzie pasował ab lub c. Które mogą być również sformułowane jako niczego innego niż ab lub c

+0

dzięki @ nu11p01n73R. Wewnątrz nie dodawałem listy usunięć, []. Podałem coś takiego "^ w. =", Co oczywiście nie działało. Czy mógłbyś powiedzieć znaczenie r i ^,^jest zwykle używane jako "zacznij od", ale tutaj wydaje się mieć inne znaczenie. – user1977867

+0

@ user1977867 Tak, gdy '^' wewnątrz klasy znaków mówi jak '[^ abc]' neguje znaczenie klasy znaków. Oznacza to, że '[abc]' będzie pasować 'a'' b' lub 'c', gdzie' [^ abc] 'nie będzie pasowało' a' 'b' lub' c'.To coś innego niż 'a'' b' lub 'c' – nu11p01n73R

+0

Czy mogę zapytać, dlaczego nazywasz listę usuniętych 'remove'list? Wydaje mi się, że jest to lista znaków, które chcesz zachować. Wspominam o tym tylko dlatego, że byłam zdezorientowana. – ikku100

4

wierzę opisać w Perlu podejście może być również stosowany w Pythonie, np:

re.sub(r'[^\w=]', '',mystring) 

by usunąć wszystko z wyjątkiem słownych znaków i =

6
re.sub(r'[^a-zA-Z0-9=]', '',mystring) 

można dodać cokolwiek chcesz podobnie jak _ w zależności od tego, które z nich chcesz zapisać.

Powiązane problemy