繁体   English   中英

如何过滤字符串以仅包含字母?

[英]How do you filter a string to only contain letters?

我如何制作一个函数,它将过滤掉字符串中的所有非字母? 例如, letters("jajk24me")将返回"jajkme" (它需要是一个 for 循环)并且string.isalpha()函数会帮助我解决这个问题吗?

我的尝试:

def letters(input):
    valids = []
    for character in input:
        if character in letters:
            valids.append( character)
    return (valids)

如果它需要在那个 for 循环中,而正则表达式不起作用,那么对循环的这个小修改将起作用:

def letters(input):
    valids = []
    for character in input:
        if character.isalpha():
            valids.append(character)
    return ''.join(valids)

(最后的''.join(valids)获取您在列表中收集的所有字符,并将它们连接成一个字符串。您的原始函数返回该字符列表)

您还可以从字符串中过滤掉字符:

def letters(input):
    return ''.join(filter(str.isalpha, input))

或使用列表理解:

def letters(input):
    return ''.join([c for c in input if c.isalpha()])

或者您可以使用正则表达式,正如其他人所建议的那样。

import re
valids = re.sub(r"[^A-Za-z]+", '', my_string)

编辑:如果它需要是一个 for 循环,这样的事情应该可以工作:

output = ''
for character in input:
    if character.isalpha():
        output += character

请参阅re.sub ,为了性能考虑重新re.compile以优化模式一次。
下面是一个简短的版本,它匹配不在AZ范围内的所有字符,并将它们替换为空字符串。 re.I标志忽略大小写,因此小写 ( az ) 字符也被替换。

import re

def charFilter(myString)
    return re.sub('[^A-Z]+', '', myString, 0, re.I)

如果你真的需要那个循环,有很多 awnsers,专门解释这一点。 但是,您可能想给出需要循环的原因。

如果您想对数字序列进行操作并且这就是循环的原因,请考虑使用如下函数替换替换字符串参数:

import re

def numberPrinter(matchString) {
     print(matchString)
     return ''
}

def charFilter(myString)
    return re.sub('[^A-Z]+', '', myString, 0, re.I)

方法 string.isalpha() 检查字符串是否仅由字母字符组成。 您可以使用它来检查是否需要进行任何修改。 至于问题的另一部分, pst 是正确的。 您可以在 python 文档中阅读有关正则表达式的信息: http : //docs.python.org/library/re.html它们可能看起来令人生畏,但一旦掌握了它们就非常有用。

当然,您可以使用isalpha 此外, valids可以是字符串。

干得好:

def letters(input):
    valids = ""
    for character in input:
        if character.isalpha():
            valids += character
    return valids

不使用 for 循环。 但这已经被彻底覆盖了。

可能有点晚了,我不确定性能,但我只是想到了这个看起来很漂亮的解决方案:

set(x).intersection(y)

你可以像这样使用它:

from string import ascii_letters

def letters(string):
    return ''.join(set(string).intersection(ascii_letters))

注意:这不会保留线性顺序。 这在我的使用情况是好的,但被警告

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM