2015-01-14 17 views
8

Trong perl s/[^\w:]//g sẽ thay thế tất cả các ký tự không tự chữ và số TRỪ:Thay thế các ký tự không tự chữ và số trừ một số ngoại lệ python

Trong python Tôi đang sử dụng re.sub(r'\W+', '',mystring) mà không loại bỏ tất cả không tự chữ và số trừ _ gạch dưới. Có cách nào để đặt ngoại lệ, tôi không muốn thay thế các dấu hiệu như = và.

Trước đây tôi đã áp dụng các cách tiếp cận khác tức là để thay thế tất cả các ký tự không mong muốn sử dụng re.sub('[[email protected]#\'\" $()]', '', mystring`) Tuy nhiên, nó không phải là có thể cho tôi để dự đoán những gì tất cả các nhân vật có thể đến trong mystring do đó Tôi muốn xóa tất cả các ký tự không phải chữ và số ngoại trừ một vài ký tự.

Google không cung cấp câu trả lời phù hợp. Tìm kiếm gần nhất là python regex split any \W+ with some exceptions nhưng điều này không giúp tôi.

Trả lời

7

Bạn có thể chỉ định mọi thứ bạn không cần xóa trong các chuỗi ký tự phủ định.

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

thử nghiệm

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

Đây biến removelist là một chuỗi có chứa danh sách của tất cả các ký tự mà bạn cần phải loại trừ từ việc loại bỏ.

gì phủ nhận lớp nhân vật có nghĩa

Khi ^ được chuyển vào lớp nhân vật nó không hoạt động như một neo nơi vì nó phủ nhận lớp nhân vật.

Đó là ^ ở bên trong một lớp nhân vật như là [^abc] nó phủ nhận ý nghĩa của lớp nhân vật.

Ví dụ [abc] sẽ phù hợp ab hoặc c nơi như [^abc] sẽ không phù hợp ab hoặc c. Mà cũng có thể được phrased như bất cứ điều gì khác hơn ab hoặc c

+0

thanks @ nu11p01n73R. Tôi không thêm danh sách xóa bên trong, []. Tôi đã cho một cái gì đó như '^ w. =' Mà khóa học không hoạt động. Bạn có thể vui lòng cho biết ý nghĩa của r và ^,^thường được sử dụng như là "bắt đầu với" nhưng ở đây có vẻ như có một ý nghĩa khác. – user1977867

+0

@ user1977867 Đúng khi '^' ở bên trong một lớp nhân vật nói như '[^ abc]' nó phủ nhận ý nghĩa của lớp nhân vật. Đó là '[abc]' sẽ khớp 'a'' b' hoặc 'c' ở đâu là' [^ abc] 'sẽ không khớp' a' 'b' hoặc' c'.Đó là bất kỳ điều gì khác ngoài 'a'' b' hoặc 'c' – nu11p01n73R

+0

Tôi có thể hỏi lý do bạn gọi đến danh sách 'xóa' danh sách xóa bỏ không? Dường như với tôi rằng đó là một danh sách các ký tự mà bạn muốn giữ. Tôi chỉ đề cập đến nó bởi vì nó làm tôi bối rối. – ikku100

4

tôi tin rằng phương pháp bạn mô tả trong perl cũng có thể được sử dụng trong trăn, ví dụ:

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

sẽ loại bỏ tất cả mọi thứ trừ word-nhân vật và =

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

Bạn có thể thêm bất cứ điều gì bạn muốn như _ bất cứ điều gì bạn muốn lưu.

Các vấn đề liên quan