簡體   English   中英

Python刪除非字母字符有異常

[英]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!

一種方法是創建一個函數,如果輸入字符有效則返回TrueFalse

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM