带非字母的字符串

时间:2011-12-03 22:25:07

标签: python

这是我学习python的第二周,我完成了一项家庭作业,我已经完成了。 问题是,第一个阶段之一是取一个字符串并删除它中的所有非字母(例如“,”“。”“;”,空格等。) 所以我拿了字符串,每次都写道:

str1 = str.replace(',', '')
str2 = str.replace(' ', '') 
....
等等5次。我的老师说现在好了。但它对我来说并不好看。 必须有更好的方法,而不是重复代码。 有人能解释一个更好的方法吗?

(我在条件中尝试使用ascii函数,但无法弄明白)

6 个答案:

答案 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'