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

wko9yo5t  于 2022-11-21  发布在  Python
关注(0)|答案(5)|浏览(166)

如何在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)

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

irtuqstp

irtuqstp1#

如果我没理解错的话,我们可以在这里使用str.maketransstr.translate方法,比如

from itertools import repeat

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

它逐行执行的操作:

  • 创建字母到None的Map,这将被解释为“删除此字符”
translation_mapping = dict(zip(letters, repeat(None))
  • 从中创建转换表
translation_table = str.maketrans(translation_mapping)
  • 使用给定str的转换表
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"'))

在我的PC上提供

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

因此在使用正则表达式和str.join 'ing单字符str ing之前,我们可能应该三思而后行。

63lcw9qa

63lcw9qa2#

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

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

编辑:
这些实际上更好:

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

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

uubf1zoe

uubf1zoe3#

您可以使用列表解析:

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

wkyowqbh4#

您的程式码无法如预期般运作,因为您提供的正则表达式只符合您给予的字母组合。您想要的是符合其中一个字母,这可以透过将它们放在括号中来达成,例如:

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)

要获得更多regex帮助,我建议访问https://regex101.com/

w46czmvw

w46czmvw5#

user_word = input(“您喜欢的句子是什么?“)
user_letter_to_remove = input(“您要删除哪些字母?“)

要删除字母列表

字母=字符串(要删除的用户字母)
对于字母中的i:使用者文字=使用者文字.replace(i,"”)
打印(用户_字)

相关问题