如何过滤字母字符串?

时间:2014-10-27 18:42:31

标签: python-3.4

这只是给我一个字符串中的第一个单词,我需要返回没有数字:

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()

我需要这个回复" ['飞机''''''']",但我'得到" [' \ n',' ',' ',' ',' ',' p',' l',' a',' n',' e', ''"等 我做错了什么?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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()分为单词,因为这是一个迟来的要求,因为它超出了名为stripNonLetters的函数的明显范围。但是,如果您希望函数处理该细分函数,请将拆分操作移动到函数的最后一行,而不是在调用者中进行后处理。