当前位置: 首页 > 面试题库 >

Python-从字符串中删除标点符号的最佳方法

訾凯歌
2023-03-14
问题内容

应该有一个比以下方法更简单的方法:

import string
s = "string. With. Punctuation?" # Sample string 
out = s.translate(string.maketrans("",""), string.punctuation)

在那儿?


问题答案:

从效率的角度来看,你不会被击败

s.translate(None, string.punctuation)

对于更高版本的Python,请使用以下代码

s.translate(str.maketrans('', '', string.punctuation))

它使用查找表在C中执行原始字符串操作-除了编写自己的C代码以外,没有什么比这更好的了。

如果不用担心速度,那么另一个选择是:

exclude = set(string.punctuation)
s = ''.join(ch for ch in s if ch not in exclude)

这比每个char的s.replace更快,但效果不如regexes或string.translate等非纯python方法,如下面的时序所示。对于这种类型的问题,以尽可能低的水平进行操作会有所回报。

计时代码:

import re, string, timeit

s = "string. With. Punctuation"
exclude = set(string.punctuation)
table = string.maketrans("","")
regex = re.compile('[%s]' % re.escape(string.punctuation))

def test_set(s):
    return ''.join(ch for ch in s if ch not in exclude)

def test_re(s):  # From Vinko's solution, with fix.
    return regex.sub('', s)

def test_trans(s):
    return s.translate(table, string.punctuation)

def test_repl(s):  # From S.Lott's solution
    for c in string.punctuation:
        s=s.replace(c,"")
    return s

print "sets      :",timeit.Timer('f(s)', 'from __main__ import s,test_set as f').timeit(1000000)
print "regex     :",timeit.Timer('f(s)', 'from __main__ import s,test_re as f').timeit(1000000)
print "translate :",timeit.Timer('f(s)', 'from __main__ import s,test_trans as f').timeit(1000000)
print "replace   :",timeit.Timer('f(s)', 'from __main__ import s,test_repl as f').timeit(1000000)

得到以下结果:

sets      : 19.8566138744
regex     : 6.86155414581
translate : 2.12455511093
replace   : 28.4436721802


 类似资料:
  • 问题内容: 如何使用Python从字符串中删除重复的字符?例如,假设我有一个字符串: 如何制作字符串: 我是python的新手,我已经很累了,它正在工作。我知道有一种最佳的聪明方法。只有经验可以证明这一点。 注意:顺序很重要,这个问题是不是类似于此一个。 问题答案: 使用:

  • 本文向大家介绍使用JavaScript从字符串中删除标点符号,包括了使用JavaScript从字符串中删除标点符号的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个JavaScript函数,该函数接受一个字符串,并从字符串中删除所有特殊字符,而在结果字符串中仅保留字母和数字。 输入 输出 因为我们删除了所有标点符号和空格 示例 以下是代码- 输出结果

  • 问题内容: 例如: 我可以这样做吗? 问题答案: 一个非常简单的实现是: 并继续添加任何其他类型的标点符号。 一种更有效的方法是 编辑:这里有关于效率和其他实现的更多讨论: 在Python中从字符串中删除标点符号的最佳方法

  • 问题内容: 我在Python中有一个Unicode字符串,我想删除所有的重音符号(变音符号)。 我在网上发现了一种用Java实现此目的的优雅方法: 将Unicode字符串转换为长规范化格式(带有单独的字母和变音符号) 删除所有Unicode类型为“变音符号”的字符。 我是否需要安装pyICU之类的库,还是仅使用python标准库就可以?那python 3呢? 重要说明:我想避免使用带有重音符号到非

  • 问题内容: 我在SQL Server 2005中有包含html标记的数据,我想将所有内容剥离掉,只在标记之间保留文本。理想的情况下也更换喜欢的东西带等 有没有简单的方法可以做到这一点,或者有人已经获得了一些示例t-sql代码? 我没有能力添加扩展的存储过程等,因此更喜欢纯t-sql方法(最好是与sql 2000向后兼容)。 我只想使用剥离的html来检索数据,而不是对其进行更新,因此理想情况下,它

  • 假设我的字符串是10个字符长。 如何删除最后一个字符? 如果我的字符串是(我不想替换字符,因为我的字符串可能包含多个字符),我只想删除最后一个字符。不管它是什么或者它发生了多少次,我都需要从我的字符串中移除最后一个字符。