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

How to remove characters from string?

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

嗨,如果有人愿意花时间尝试帮我解决一些 python 代码。

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

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

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])
>>> sentence1 = re.sub(str([letters]), '', sentence)

最好以 letters = 'abcd' 的形式输入字母。必要时不要使用空格或标点符号。

.

编辑:

这些其实更好:

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

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

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

from itertools import repeat

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

逐行执行的操作:

  • 创建字母到 None 的映射,这将被解释为 "remove this character"

    translation_mapping = dict(zip(letters, repeat(None))
    
  • 从中创建翻译table

    translation_table = str.maketrans(translation_mapping)
    
  • 对给定的 str

    使用翻译 table
    sentence1 = sentence.translate(translation_table)
    

测试

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

比较

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 一个字符 strings.

之前可能应该三思

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

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/