如何利用Python删除字符串中的特殊字符

583 阅读4分钟

任何不是字母或数字的字符,如标点符号和空白处,都被认为是特殊的。程序员面临的最常见的挑战是从一个字符串中删除一个字符。然而,在有些情况下,需求要严格得多,需要消除的不仅仅是一个,而是一整串恶意的字符。这些字符可以采取特殊字符的形式,可用于重建有效的密码和其他各种应用。当特殊字符从一个字符串中被移除时,它就只剩下字母和数字了。

字符串是Python中最常用的数据类型,当它们被充分使用时,会引起大量的问题。最典型的是将新的 tab 转义序列附加到字符串的末尾,或者用特殊字符代替重音符号。这些错误在与文件进行交互时极为常见。不管是什么导致了格式化的中断,我们必须能够从字符串中删除这些字符。Python 有各种内置函数用于不同的目的。在 Python 中,字符串是不可改变的。这意味着我们将不能改变它的内容。然而,我们可以创建一个新的字符串,只用旧的字符串中的几个字符。然后,原来的变量可以被分配给更新的字符串。这看起来就像字符串被改变了一样,删除了不需要的字符。在这篇文章中,我们将看看从字符串中删除特殊字符的几种不同方法。

例1:

第一个例子包括使用Python的isalnum。Python string method.isalnum()如果在指定的字符串中存在α-数字字符,则返回True。如果不是α-数字字符,它返回False。可以利用这一点,通过在一个字符串上循环,将仅有的α-数字字符附加到一个新创建的字符串上。请看下面的例子。在下面的代码中,你可以看到我们已经创建了两个字符串,其中一个包括我们的旧字符串,另一个是空的。使用.isalnum()方法,我们循环浏览字符串中的每个字符,并确定它是否是字母数字。如果是这样,我们就把这个字符追加到我们的字符串中。如果不是,我们就不做任何事情。

mytxt = 'python -- is. easy!'

res_txt = ''

for character in mytxt:

if character.isalnum():

res_txt += character

print(res_txt)

这是输出结果,你可以看到所有的特殊字符都被成功删除。

例2:

现在我们将使用正则表达式删除字符串中的特殊字符。正则表达式是一组具有特定语法的字符,可以用来匹配或查找其他字符串或字符串集合。Python 中的 re 模块完全支持 Perl 式正则表达式。当构建正则表达式时出现错误,re 模块会产生 re.error 异常。Python 中的正则表达式模块 re 包含几个有用的字符串操作技术。

sub() 方法让我们用替代性的字符串来添加字符串,这就是这些策略之一。当我们使用 re 库时,我们不必指定要替换的字符,这是其中的一个好处。因此,我们可以指定替换字符范围(或保留)。为了保留所有的字母和空格,我们可以告诉.sub()方法来替换除[a-zA-Z0-9]以外的所有字符。看一看我们在代码中完成了什么。为我们的字符串创建了一个变量。我们利用re.sub()方法来创建我们的替换。该函数接受三个参数。(1)要替换的模式(我们用the表示我们不想替换任何东西),(2)要替换的字符,和(3)要替换的字符串。

import re

mytxt = 'python -- is. easy!'

res_txt = re.sub(r"[^a-zA-Z0-9 ]", "", mytxt)

print(res_txt)

请看上面代码的下面输出:

例3:

Python 的 filter() 方法可以从一个字符串中删除特殊字符,类似于 for 循环的作用。filter()方法需要两个参数,以便程序的正常执行。你需要一个迭代器和一个函数来对照评估,以便过滤。由于字符串是可迭代的,我们可以传入一个方法来删除特殊字符。像for循环技术一样,可以利用.isalnum()技术来验证一个子串是否是字母数字的。让我们看看这在Python中是如何工作的。使用下面代码中的过滤器函数创建一个只有字母数字字符的过滤器对象。然后使用str.join技术将我们的字符与空白字符连接起来。

import re

mytxt = 'python -- is. easy!'

res_txt = ''.join(filter(str.isalnum, mytxt))

print(res_txt)

这里你可以看到特殊字符被删除了。

总结

在这篇文章中你学到了如何从 Python 字符串中删除特殊字符。这是用 isalphanum() 方法、正则表达式的 re 库和 filter() 方法完成的。我们还提到了成功实现这一目的的例子。与文本数据打交道正变得越来越重要;因此,学习如何做到这一点是一项宝贵的技能。