Python 如何从字符串中删除字符?

Python 如何从字符串中删除字符?,python,regex,string,replace,strip,Python,Regex,String,Replace,Strip,如何在Python中从用户定义的句子中删除用户定义的字母 您好,如果有人愿意花时间尝试并帮助我完成一些python代码 我目前正在做一个软件工程训练营,目前的要求是我创建一个程序,其中用户输入一个句子,然后用户将输入他/她希望从句子中删除的字母 我在网上搜索过,有很多关于从字符串中删除字母的文章和帖子,但我找不到一篇关于如何从用户定义字符串中删除用户定义字母的文章或帖子 import re sentence = input("Please enter a sentence: ") letters

如何在Python中从用户定义的句子中删除用户定义的字母

您好,如果有人愿意花时间尝试并帮助我完成一些python代码

我目前正在做一个软件工程训练营,目前的要求是我创建一个程序,其中用户输入一个句子,然后用户将输入他/她希望从句子中删除的字母

我在网上搜索过,有很多关于从字符串中删除字母的文章和帖子,但我找不到一篇关于如何从用户定义字符串中删除用户定义字母的文章或帖子

import re
sentence = input("Please enter a sentence: ")
letters = input("Please enter the letters you wish to remove: ")
sentence1 = re.sub(letters, '', sentence)
print(sentence1)

预期结果应该从用户定义的字符串中删除多个字母,但如果只输入1个字母,则这将删除一个字母。如果您输入多个字母,它将只打印原始句子。任何帮助或指导都将不胜感激。

您可以使用列表:

result = ''.join([x for x in sentence if x not in letters])
最好以
字母='abcd'
的形式输入字母。如有必要,无空格或标点符号。

编辑:

>>> re.sub('['+letters+']', '', sentence)
>>> re.sub('['+str(letters)+']', '', sentence)
这些实际上更好:

>>> re.sub('['+letters+']', '', sentence)
>>> re.sub('['+str(letters)+']', '', sentence)

如果出现在字符串中,第一个也会删除
\'
,尽管这是一个更漂亮的解决方案

如果我理解正确,我们可以在这里使用和类似的方法

from itertools import repeat

sentence1 = sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))
这是一行一行的:

  • 创建字母到
    None
    的映射,该映射将被解释为“删除此字符”

  • 从中创建翻译表

    translation_table = str.maketrans(translation_mapping)
    
  • 对给定的
    str使用翻译表

    sentence1 = sentence.translate(translation_table)
    
试验 比较 在我的电脑上显示

this solution: 3.620041800000024
@FailSafe solution using `re` module: 66.5485033
@raratiru solution using `str.join` method: 70.18480099999988

因此,在到处使用正则表达式和使用一个字符之前,我们可能应该三思而后行。

您的代码不能按预期工作,因为您提供的正则表达式只匹配您给定的字母的精确组合。您需要匹配其中一个字母,这可以通过将它们放在括号中来实现,例如:

import re
sentence = input("Please enter a sentence: ")
letters = input("Please enter the letters you wish to remove: ")
regex_str = '[' + letters + ']'
sentence1 = re.sub(regex_str, '', sentence)
print(sentence1)

要获得更多的正则表达式帮助,我建议访问

给用户一个他必须输入字母的特定格式(例如:“E,f,g”),然后在每个逗号处分割输入,剩下一个字母数组。迭代数组并为数组中的每个字母调用re.sub(字母,(数组中的字母),句子)。re.sub不能处理多个字母的原因是它按照用户提供的特定顺序搜索这些字母。您可以做一些非常难看的事情,效果如下:
re.sub(str(列表(字母)),“”,句子)
EDIT:事实上,这是一个愚蠢的想法。用字母“for l:句子=句子。替换(l)”,怎么样?如果要单独删除该字母。。。只需将字母作为一个单词删除就更容易了。我添加了简单的基准测试,这样每个人都可以看到使用正则表达式和
str
methods之间的区别这就像做梦一样O我试过句子1=re.sub([字母]),'',句子),但我从没想过再把它定义为str!非常感谢@哈哈,谢谢。我提供了一个编辑。这个问题确实很有趣。@FaiSafe哈哈,是的,任务听起来很简单,但当我真的坐下来试着完成它时,我想“我把自己弄到了什么地方?”我现在就试试你的编辑吧!:这也很有效!非常感谢您的回复!你有regex_str='['+字母+']'的那一行非常不同。Tbh,我从没想过这么简单的任务会让我的大脑融化得这么厉害!哈哈!实际上,我曾想过使用dict函数,就像您在“Test”中使用的那样,但我不知道如何实际实现它来删除字符串中的字母。我也在尝试.join方法,但根据我目前的知识,它只会剥离1个字母,而不是所有的输入字母。@Deeface:str.join的问题是,当我们可以简单地对目标字符串本身使用内置方法时,它会将“临时”的一个字符串串联起来(如提供的解决方案中所示)在大多数情况下,这将是更多efficient@Deeface:我已经添加了此代码的详细说明以及与raratiru解决方案的比较,非常感谢您对解决方案的详细解释!:我实际上是在尝试你的方法。你还秘密地教我如何对解决方案进行基准测试!:D@Deeface实际上,这是一个高级编程教程。在生产过程中,这种详细的思维方式会对最终的质量水平产生影响。
from timeit import timeit
print('this solution:',
      timeit('sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))',
             'from itertools import repeat\n'
             'sentence = "Hello World" * 100\n'
             'letters = "el"'))
print('@FailSafe solution using `re` module:',
      timeit('re.sub(str([letters]), "", sentence)',
             'import re\n'
             'sentence = "Hello World" * 100\n'
             'letters = "el"'))
print('@raratiru solution using `str.join` method:',
      timeit('"".join([x for x in sentence if x not in letters])',
             'sentence = "Hello World" * 100\n'
             'letters = "el"'))
this solution: 3.620041800000024
@FailSafe solution using `re` module: 66.5485033
@raratiru solution using `str.join` method: 70.18480099999988
import re
sentence = input("Please enter a sentence: ")
letters = input("Please enter the letters you wish to remove: ")
regex_str = '[' + letters + ']'
sentence1 = re.sub(regex_str, '', sentence)
print(sentence1)