Skip to main content
 首页 » 编程设计

python之删除字母数字词,Python 3 中有一些异常(exception)

2025年05月04日23qq号

我试图通过删除字母数字词(同时包含字母和数字的词)来清理 Python 3 中的一些文本主体,但我希望在文本中保留一些异常(exception)情况。以下代码从文本中删除所有字母数字词:

import re 
 
string1 = "3n3k game gnma34 xbox360 table" 
string2 = "the a22b b3kj3 ps4 2ij2aln potato" 
 
new_string1 = re.sub(r'\w*\d\w*', '', string1) 
new_string2 = re.sub(r'\w*\d\w*', '', string2) 

上面的代码生成了 new_string1 和 new_string2,它是“游戏 table ”,new_string2 是“土 bean ”。我需要的是将 new_string1 设为“游戏 xbox360 表”,并将 new_string2 设为“ps4 土 bean ”。

我想我可以创建一个异常数组,例如:

exceptions = ['xbox360', 'ps4'] #there may be many more exceptions than this 

但我不太确定如何将这个异常列表合并到我的正则表达式中(我对这个概念还很陌生)。非常感谢任何见解!

请您参考如下方法:

使用否定前瞻。负先行是零长度:它不匹配任何东西;它要么成功要么失败,并且在完成后,光标仍位于之前的位置。因此,您想检查单词边界 (\b),检查以下文本是否不在您的异常(exception)列表中 ((?!...)) ,并使用您现有的正则表达式来匹配单词 (\w*\d\w*)。

要构造前瞻的主体,只需将 exceptions 的元素与中间的 | 连接在一起,或者只是将 exceptions 设为一个匹配您要直接保留的单词的正则表达式。

我对 Python 不太熟悉,所以这里是示例中的正则表达式应该是什么样子,我希望你能概括一下:

\b(?!xbox360|ps4)\w*\d\w* 

去除空格

" ".join(re.sub(r'\b(?!xbox360|ps4)\w*\d\w*'," ",string1).split())