備忘録です。
今回は文字列が数字かどうか判定するためのisdigit()の使い方の備忘録。文字列の中に数字が含まれているのか。全て数字か、全てではないかなど、パスワードの条件付けなどに利用できる方法です。
文字列が数字かどうか判定する
まずは、与えられた文字列が数字かどうかを判定するコードです。下記の関数で与えられた文字列が数字であればリストに加えそのリストを返します。
def count_digits(string):
l_digit = [elem for elem in string if elem.isdigit()==True]
return l_digit
count_digits('aaaa2345')
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)
※パスワードの条件をチェックする関数を作るための設定だったので関数名は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)
正規表現を使用して数字があるかどうかを調べる
次は正規表現を使用して同じように数字があるかどうか判定します。正規表現の方が上記の関数を使用するより高速になるそうです。また、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)
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)
全てが数字かどうか判定する
any()はどれか、all()は全てなのでわかりやすい
string3 = '1234567'
def is_acceptable_password(string):
return all(elem.isdigit() for elem in string)
is_acceptable_password(string3)
以上!