5

文字列からすべての非文字を除外する関数を作成するにはどうすればよいですか? たとえば、letters("jajk24me")back を返します"jajkme"。(これは for ループである必要があります)string.isalpha()関数はこれに役立ちますか?

私の試み:

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

6 に答える 6

23

forループに含める必要があり、正規表現では機能しない場合は、ループのこの小さな変更が機能します。

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

''.join(valids)最後に、リストに収集したすべての文字を取得し、それらを1つの文字列に結合します。元の関数は、代わりにその文字のリストを返しました)

文字列から文字を除外することもできます。

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

またはリスト内包表記:

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

または、他の人が示唆しているように、正規表現を使用することもできます。

于 2012-09-13T06:12:06.243 に答える
8
import re
valids = re.sub(r"[^A-Za-z]+", '', my_string)

編集: forループである必要がある場合は、次のように機能するはずです。

output = ''
for character in input:
    if character.isalpha():
        output += character
于 2012-09-13T06:10:13.357 に答える
3

を参照re.subしてください。パフォーマンスについてはre.compile、パターンを一度最適化することを検討してください。以下は、 ~ からまでの範囲にないすべての文字に一致し、それらを空の文字列に置き換える
短いバージョンです。フラグは大文字と小文字を区別しないため、小文字 ( )文字も置き換えられます。AZre.Ia-z

import re

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

そのループが本当に必要な場合は、具体的に説明している多くの awners があります。ただし、ループが必要な理由を説明したい場合があります。

数列を操作したいが、それがループの理由である場合は、置換文字列パラメーターを次のような関数に置き換えることを検討してください。

import re

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

def charFilter(myString)
    return re.sub('[^A-Z]+', '', myString, 0, re.I)
于 2012-09-13T06:07:37.567 に答える
0

もちろん使用できますisalpha。また、valids文字列にすることもできます。

どうぞ:

def letters(input):
    valids = ""
    for character in input:
        if character.isalpha():
            valids += character
    return valids
于 2012-09-13T06:16:28.480 に答える
0

string.isalpha()メソッドは、文字列が英字のみで構成されているかどうかを確認します。これを使用して、変更が必要かどうかを確認できます。質問の他の部分に関しては、pstはちょうどいいです。正規表現については、Pythonドキュメントで読むことができます。http://docs.python.org/library/re.html 気が遠くなるように見えるかもしれませんが、一度コツをつかめば本当に便利です。

于 2012-09-13T06:11:09.067 に答える