从 Python3.3 中的字符串中删除除字母和空格之外的所有内容
Posted
技术标签:
【中文标题】从 Python3.3 中的字符串中删除除字母和空格之外的所有内容【英文标题】:Removing everything except letters and spaces from string in Python3.3 【发布时间】:2014-03-01 03:19:55 【问题描述】:我有这个示例字符串:happy t00 go 129.129
,我只想保留空格和字母。到目前为止,我所能想到的非常有效的方法是:
print(re.sub("\d", "", 'happy t00 go 129.129'.replace('.', '')))
但它只特定于我的示例字符串。如何删除除字母和空格以外的所有字符?
【问题讨论】:
所有答案均不包含 24 个字母,例如ß、Ä、Ö、Ü、Ą、Ż 等。也许问题应该只提及 ASCII 字母? 【参考方案1】:whitelist = set('abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ')
myStr = "happy t00 go 129.129$%^&*("
answer = ''.join(filter(whitelist.__contains__, myStr))
输出:
>>> answer
'happy t go '
【讨论】:
经过测试,当命令提示符中的每个代码作为python -m timeit -n 100 -s
循环运行时,我发现这比 Joel 的答案快 0.0029 微秒。
@Gronk:>>> Timer('"".join(filter(whitelist.__contains__, myStr))', ''' ... whitelist = set('abcdefghijklmnopqrstuvwxy ABCDEFGHIJKLMNOPQRSTUVWXYZ') ... myStr = 'happy t00 go 129.129' * 10''').timeit(number=1000) 0.02490997314453125 >>> Timer('re.sub(r"[^a-zA-Z ]+", "", myStr)', '''import re ... myStr = 'happy t00 go 129.129' * 10''').timeit(number=1000) 0.011039972305297852 >>>
。我的观点是 0.0029 微秒绝对在 100 样本大小的正常变化范围内。
这也会过滤可能有问题的重音字母字符。
缺少小写字母“z”【参考方案2】:
inspectorG4dget 的方法略有不同 - 从 string
导入 & 生成器理解:
from string import ascii_letters
allowed = set(ascii_letters + ' ')
myStr = 'happy t00 go 129.129'
answer = ''.join(l for l in myStr if l in allowed)
answer
# >>> 'happy t go '
性能对比:
(我把 myStr 加长了一点,并预编译了正则表达式,让事情变得更有趣)
import re
from string import ascii_letters, digits
myStr = 'happy t00 go 129.129'*20
allowed = set(ascii_letters + ' ')
# Generator
%timeit answer = ''.join(l for l in myStr if l in allowed)
# filter/__contains__
%timeit answer = ''.join(filter(allowed.__contains__, myStr))
# Regex
pat = re.compile(r'[^a-zA-Z ]+')
%timeit answer = re.sub(pat, '', myStr)
每个循环 53 µs ± 6.43 µs(7 次运行的平均值 ± 标准偏差,每次 10000 个循环) 每个循环 43.3 µs ± 7.48 µs(7 次运行的平均值 ± 标准偏差,每次 10000 个循环) 每个循环 26 µs ± 509 ns(7 次运行的平均值 ± 标准偏差,每次 10000 次循环)
【讨论】:
我发现这是最好的答案。它更具可读性,它展示了我们如何使用string constants 而不是手动输入它们,这很容易引发错误。【参考方案3】:使用集合补码:
re.sub(r'[^a-zA-Z ]+', '', 'happy t00 go 129.129')
【讨论】:
以上是关于从 Python3.3 中的字符串中删除除字母和空格之外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章
如何从字符串中删除除字母、数字、空格、感叹号和问号之外的所有内容?