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


当前回答

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倍。

其他回答

较短的方法:

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

如果你想在单词和数字之间有空格,用''代替''

import re
abc = "askhnl#$%askdjalsdk"
ddd = abc.replace("#$%","")
print (ddd)

你会看到你的结果是

'Askhnlaskdjalsdk

function regexFuntion(st) {
  const regx = /[^\w\s]/gi; // allow : [a-zA-Z0-9, space]
  st = st.replace(regx, ''); // remove all data without [a-zA-Z0-9, space]
  st = st.replace(/\s\s+/g, ' '); // remove multiple space

  return st;
}

console.log(regexFuntion('$Hello; # -world--78asdf+-===asdflkj******lkjasdfj67;'));
// Output: Hello world78asdfasdflkjlkjasdfj67

这将删除除空格外的所有非字母数字字符。

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

特殊字符空格888323

对于其他语言,如德语,西班牙语,丹麦语,法语等包含特殊字符(如德语“Umlaute”ü, ä, ö),只需将这些添加到正则表达式搜索字符串:

例如德语:

re.sub('[^A-ZÜÖÄa-z0-9]+', '', mystring)