我需要从字符串中删除所有特殊字符,标点符号和空格,以便我只有字母和数字。


当前回答

TLDR

我计算了提供的答案。

import re
re.sub('\W+','', string)

通常比上一个最快的答案快3倍。

使用此选项时应谨慎。一些特殊字符(如ø)不能使用这种方法进行条纹。


在看到这个之后,我有兴趣通过找出在最少的时间内执行的答案来扩展提供的答案,所以我通过timeit检查了一些建议的答案,并对照两个示例字符串:

string1 = '特殊$#!字符空格888323' '枫糖浆多少钱? '20.99美元吗?这太荒谬了!!”

示例1

'.join(e for e in string if e.isalnum())

string1 - Result: 10.7061979771 string2 - Result: 7.78372597694

示例2

import re
re.sub('[^A-Za-z0-9]+', '', string)

string1 - Result: 7.10785102844 string2 - Result: 4.12814903259

示例3

import re
re.sub('\W+','', string)

string1 - Result: 3.11899876595 string2 - Result: 2.78014397621

以上结果是由以下平均值的最低返回结果的乘积:重复(3,2000000)

例3可以比例1快3倍。

其他回答

假设你想要使用正则表达式并且你想要/需要unicode - cognant 2。X代码是2to3-ready:

>>> import re
>>> rx = re.compile(u'[\W_]+', re.UNICODE)
>>> data = u''.join(unichr(i) for i in range(256))
>>> rx.sub(u'', data)
u'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\xaa\xb2 [snip] \xfe\xff'
>>>

下面是一个正则表达式,用于匹配不是字母或数字的字符串:

[^A-Za-z0-9]+

下面是执行正则表达式替换的Python命令:

re.sub('[^A-Za-z0-9]+', '', mystring)
import re
my_string = """Strings are amongst the most popular data types in Python. We can create the strings by enclosing characters in quotes. Python treats single quotes the 

和双引号一样。”""

# if we need to count the word python that ends with or without ',' or '.' at end

count = 0
for i in text:
    if i.endswith("."):
        text[count] = re.sub("^([a-z]+)(.)?$", r"\1", i)
    count += 1
print("The count of Python : ", text.count("python"))

与使用正则表达式的其他人不同,我将尝试排除不是我想要的每个字符,而不是显式地列举我不想要的字符。

例如,如果我只想要字符从'a到z'(大写和小写)和数字,我将排除所有其他:

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

这意味着“用空字符串替换每个不是数字的字符,或者'a到z'或'a到z'范围内的字符”。

事实上,如果你在正则表达式的第一个位置插入特殊字符^,你将得到否定。

额外提示:如果您还需要将结果小写,您可以使正则表达式更快更简单,只要您现在不会发现任何大写。

import re
s = re.sub(r"[^a-z0-9]","",s.lower())

这可以不使用regex完成:

>>> string = "Special $#! characters   spaces 888323"
>>> ''.join(e for e in string if e.isalnum())
'Specialcharactersspaces888323'

你可以使用str.isalnum:

S.isalnum() -> bool 如果S中的所有字符都是字母数字,则返回True 且S中至少有一个字符,否则为假。

如果坚持使用正则表达式,其他解决方案也可以。但是请注意,如果可以在不使用正则表达式的情况下完成,那么这是最好的方法。