簡體   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