簡體   English   中英

Python 從具有特殊情況的列表中刪除非字母字符/單詞

[英]Python removing a non alphabetical character/words from a list with a special cases

嗨,伙計們,我只是想知道如果列表中的單詞不包含任何字母字符,我該如何將其刪除,但如果它包含任何字母字符后跟任何類型的特殊字符或數字,則不會被刪除

說我有一個句子/單詞列表,如下所示:

['python','abc123','@@','!!','12345abc#','hello@','141351351','123abc']

所需的 output 將是:

['python','abc123','','','12345abc#','hello@','','123abc']

我嘗試過的是以下內容:

data = ['python','abc123','@@','!!','12345abc#','hello@','141351351','123abc']
regex = re.compile('[^a-zA-Z0-9&._-]')
filtered= [regex.sub('', each_data) for each_data in data ]

結果是:

['python', 'abc123', '12345abc', 'hello', '141351351', '123abc']

它刪除了所有錯誤的特殊字符我不知道如何解決這個問題,我仍在考慮如何使用正則表達式解決它,我也嘗試過使用 nltk 並且似乎也找不到答案。 任何形式的提示或幫助將不勝感激

我不確定我是否理解您的問題,但您提供的示例輸入輸出可以處理為:

[item if re.search('(?i)[a-z]', item) else '' for item in your_list]

你的例子:

your_list = ['python','abc123','@@','!!','12345abc#','hello@','141351351','123abc']

import re
[item if re.search('(?i)[a-z]', item) else '' for item in your_list]

# output:
# ['python', 'abc123', '', '', '12345abc#', 'hello@', '', '123abc']

您可以使用以下方式過濾掉列表中不包含字母的任何項目

["" if not any(c.isalpha() for c in x) else x for x in l]

使用re庫,您可以使用類似[^\W\d_]的模式來匹配任何 Unicode 字母(或[A-Za-z]僅處理 ASCII 字母),並且您可以使用

import re
print( ["" if not re.search(r'[^\W\d_]', x) else x for x in  l] )

但是,非正則表達式方法似乎已經為您工作了。

注意:“任何字母字符后跟任何類型的特殊字符或數字”可以與[^\W\d_][\W\d_] ( [A-Za-z][^A-Za-z]僅適用於 ASCII)模式,一個字母后跟一個非字母。

請參閱Python 演示

import re
l = ['python','abc123','@@','!!','12345abc#','hello@','141351351','123abc']
print( ["" if not re.search(r'[^\W\d_]', x) else x for x in  l] )
# => ['python', 'abc123', '', '', '12345abc#', 'hello@', '', '123abc']
print( ["" if not any(c.isalpha() for c in x) else x for x in  l] )
# => ['python', 'abc123', '', '', '12345abc#', 'hello@', '', '123abc']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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