ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: 文字列が数字かどうか判定するあれこれ

備忘録です。

今回は文字列が数字かどうか判定するためのisdigit()の使い方の備忘録。文字列の中に数字が含まれているのか。全て数字か、全てではないかなど、パスワードの条件付けなどに利用できる方法です。

文字列が数字かどうか判定する

まずは、与えられた文字列が数字かどうかを判定するコードです。下記の関数で与えられた文字列が数字であればリストに加えそのリストを返します。

# 文字列のものをリストにする
def count_digits(string):
    l_digit = [elem for elem in string if elem.isdigit()==True]
    return l_digit


count_digits('aaaa2345')

# > ['2', '3', '4', '5']

count_digitsという関数に文字列 'aaaa2345' を渡すと、2、3、4、5が数字なのでこちらがリストに格納されます。

 

文字列の中に一つでも数字が含まれているかどうか

 

次の関数はany()と組み合わせて文字列が一つでも含まれていればTrueを返す関数です。

string1 = 'String Number One'
string2 = 'String Number 2'


def is_acceptable_password(string):
    return any(elem.isdigit() for elem in string)


is_acceptable_password(string1)

# > False


※パスワードの条件をチェックする関数を作るための設定だったので関数名はis_acceptable_passwordになっていますが気にせずに。。

 

any()関数を使うことで文字列内に一つでも数値が入っていたらTrueを返します。

 

関数をlambdaで作り実行する

以下は上記関数を無名関数にしてあるものです。普通の関数とlamdaの比較ができlamdaの作りがわかりやすいのでこちらも備忘録として掲載。

 

string1 = 'String Number One'
string2 = 'String Number 2'

is_acceptable_password = lambda string: any(elem.isdigit() for elem in string)


is_acceptable_password(string1)

# > False

 

正規表現を使用して数字があるかどうかを調べる

次は正規表現を使用して同じように数字があるかどうか判定します。正規表現の方が上記の関数を使用するより高速になるそうです。また、complieの上でsearchする方がさらに速いそうです。

 

re.search()

import re

string1 = 'Number One Two Three'
string2 = 'Number 123'

def is_acceptable_password(string):
    if (re.search('\d', string)):
        return True
    else:
        return False


is_acceptable_password(string1)

# > False

re.compile()→re.search()

 

import re

string1 = 'Number One Two Three'
string2 = 'Number 123'

def is_acceptable_password(string):
    re_numbers = re.compile('\d')
    return False if (re_numbers.search(string)==None) else True

is_acceptable_password(string1)

# > False

 

全てが数字かどうか判定する

 

any()はどれか、all()は全てなのでわかりやすい

string3 = '1234567'

def is_acceptable_password(string):
    return all(elem.isdigit() for elem in string)

is_acceptable_password(string3)

# > True

 

以上!