2014-10-27 100 views
0

这只是给我的第一个字一个字符串,我需要没有数字返回:如何过滤字母字符的字符串?

def stripNonLetters(aString): 
words=[] 
aString=aString.lower() 
for word in aString: 
     if word.isalpha() or word.isspace(): 
     words.append(word) 
print(words) 
return ''.join(words) 

def main(): 
myString='''Planes and 12 cars.''' 
stripNonLetters(myString) 

main() 

我需要这个返回“[‘飞机’,‘和’,‘汽车’]”,但我'''''','','','p','l','a','n','e','s''等 我究竟做错了什么?

+0

第一个符合条件的'返回'(注意:应该是带有圆括号的'word.isalpha()'),所以'for'循环的其余部分永远不会运行。 – jonrsharpe 2014-10-27 18:44:19

回答

0

做完之后aString=aString.split(),aString是单词列表,其中没有包含空格。如果删除该行,则应该没问题:

def stripNonLetters(aString): 
    answer = '' 
    for char in aString: 
     if char.isalpha() or char.isspace(): 
      answer += char 
    return answer 

当然,这需要大量的字符串添加,效率低下。因此,你可能会更倾向于使用:

def stripNonLetters(aString): 
    answer = [] 
    for char in aString: 
     if char.isalpha() or char.isspace(): 
      answer.append(char) 
    return ''.join(answer) 
+0

我得到了错误“str对象没有属性追加” – 2014-10-27 19:04:30

+0

@JoeyCartella:哎呀!我在复制粘贴中发生错误。现在修正 – inspectorG4dget 2014-10-27 19:45:18

+0

连接似乎没有做任何事情,因为当我摆脱它时,我得到了相同的输出。字符串中的字母单独显示而不是以原始单词显示。 – 2014-10-27 21:05:41

0

这将是更直接的(而且往往更有效)使用正则表达式来处理字符串散装的,而不是字符一个字符。例如:

import re 

def stripNonLetters(s): 
    """ 
    Strip all non-letter, non-space characters from a string. 
    Runs of whitespace are normalized ot single space charactes, 
    except at the start and end, where they are stripped. 
    """ 
    s = re.sub(r'[^A-Za-z\s]', '', s.strip()) 
    return re.sub(r'\s+', ' ', s) 

s = '''Planes and 12 cars.''' 
print stripNonLetters(s).split() 

我一直结果纳入末字的.split()部门,因为这是一个后期陈述要求,因为它超越了功能的明显职权范围称为​​。但是如果您希望函数处理该细分函数,请将拆分操作移至函数的最后一行,而不是在调用方中进行后期处理。