这是我学习python的第二周,我完成了一项家庭作业,我已经完成了。 问题是,第一个阶段之一是取一个字符串并删除它中的所有非字母(例如“,”“。”“;”,空格等。) 所以我拿了字符串,每次都写道:
str1 = str.replace(',', '')
str2 = str.replace(' ', '')
....
等等5次。我的老师说现在好了。但它对我来说并不好看。
必须有更好的方法,而不是重复代码。
有人能解释一个更好的方法吗?
(我在条件中尝试使用ascii函数,但无法弄明白)
答案 0 :(得分:2)
您可以像这样使用re
module:
import re
str = re.sub(r'[^a-zA-Z]+', '', str)
答案 1 :(得分:1)
当然!你可以使用一个循环:
toBeReplaced = [',',' ', ... some more chars ...]
for c in toBeReplaced:
yourString = yourString.replace(c,'')
您还可以查看正则表达式,这将使您的工作更简单,更稳定。但这可能不是你老师想要看的东西。
答案 2 :(得分:1)
找到letters比找到非字母更容易:
import string
def clean_string(input_string):
result = ""
for char in input_string:
if char in string.letters: # string.letters contains a...zA...Z
result += char
return result
还有更好的方法:
def clean_string2(input_string):
return "".join([char for char in input_string if char in string.letters])
答案 3 :(得分:1)
我不会给你任何代码,因为这是一个家庭作业,如果你自己尝试编码它会更好。但我会试着给你一些提示,让你朝着正确的方向推动你。
作为家庭作业,您的老师希望您编写可扩展且易于管理的代码。当您复制代码时,它会丢失这两个属性。
对于这项任务,您要做的第一件事就是仔细查看要求。有太多非字母字符,因此您只能考虑包含字母字符,而不是删除每个字符。这可以使用for
循环来完成。
一旦学习了更多高级技术,就可以开始研究正则表达式模式并使用它们。在python中,可以在re
模块中找到它们。
答案 4 :(得分:0)
一行没有正则表达式且没有导入:
''.join( [ x for x in str if x.isalpha() ] )
样品:
>>> ''.join( [ x for x in 'pepito;.:123jdjd' if x.isalpha() ] )
'pepitojdjd'
答案 5 :(得分:0)
>>> s = 'pepito;.:123jdjd'
>>> import string
>>> s.translate(string.maketrans('',''), string.punctuation)
'pepito123jdjd'