[英]Python Removing non-alphabetical characters with exceptions
我很難對包含大量非字母字符的大文本進行數據分析。 我嘗試使用
string = filter(str.isalnum, string)
但我的文本中也有"@"
要保留。 如何為像"@"
這樣的字符設置例外?
使用正則表達式更容易:
string = re.sub("[^A-Za-z0-9@]", "", string)
您可以使用re.sub
re.sub(r'[^\w\s\d@]', '', string)
例子:
>>> re.sub(r'[^\w\s\d@]', '', 'This is @ string 123 *$^%')
This is @ string 123
您可以使用lambda
函數來指定允許的字符。 但還要注意filter
返回一個<filter object>
,它是返回值的迭代器。 因此,您必須將其縫合回字符串:
string = "?filter_@->me3!"
extra_chars = "@!"
filtered_object = filter(lambda c: c.isalnum() or c in extra_chars, string)
string = "".join(filtered_object)
print(string)
給出:
filter@me3!
一種方法是創建一個函數,如果輸入字符有效則返回True
或False
。
import string
valid_characters = string.ascii_letters + string.digits + '@'
def is_valid_character(character):
return character in valid_characters
# Instead of using `filter`, we `join` all characters in the input string
# if `is_valid_character` is `True`.
def get_valid_characters(string):
return "".join(char for char in string if is_valid_character(char))
一些示例輸出:
>>> print(valid_characters)
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@
>>> get_valid_characters("!Hello_#world?")
'Helloworld'
>>> get_valid_characters("user@example")
'user@example'
一種更簡單的編寫方法是使用正則表達式。 這將完成同樣的事情:
import re
def get_valid_characters(string):
return re.sub(r"[^\w\d@]", "", string)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.