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

问题描述 投票:3回答:4

如何从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个字母,这将删除一个字母。如果您输入多个字母,它将只打印原始句子。任何帮助或指导将不胜感激。

python regex string replace strip
4个回答
2
投票
>>> sentence1 = re.sub(str([letters]), '', sentence)

最好以letters = 'abcd'形式输入字母。如有必要,不得有空格或标点符号。

.

编辑:

这些实际上更好:

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

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


3
投票

如果我理解正确,我们可以在这里使用str.maketransstr.translate方法

from itertools import repeat

sentence1 = sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))

这是一行一行的:

  • 创建字母到None的映射,将被解释为“删除此字符” translation_mapping = dict(zip(letters, repeat(None))
  • 从中创建翻译表 translation_table = str.maketrans(translation_mapping)
  • 使用转换表给出str sentence1 = sentence.translate(translation_table)

Test

>>> sentence = 'Some Text'
>>> letters = 'te'
>>> sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))
'Som Tx'

Comparison

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

所以我们在使用正则表达式之前应该三思而后行str.join'ing一个字符的strings。


2
投票

您可以使用列表理解:

result = ''.join([x for x in sentence if x not in letters])

2
投票

您的代码无法按预期工作,因为您提供的正则表达式仅匹配您提供的字母的确切组合。你想要的是匹配其中一个字母,这可以通过将它们放在括号中来实现,例如:

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)

如需更多正则表达式的帮助,我建议您访问https://regex101.com/

© www.soinside.com 2019 - 2024. All rights reserved.