正規表現を使うと検索するパターンを指定することができる!
正規表現を使うとどれくらい短縮できるのか比較検討する。
※isdecimal():1文字以上の数字で構成されているときににTrueを返す。
##正規表現を使わない場合
qiita.py
def is_phone_number(text):
if len(text)!=12: #👈文字数が12文字になっているかどうか
return False
for i in range(0,3):
if not text[i].isdecimal(): #👈最初の3桁が数字で構成されているか
return False
if text[3]!='-': #👈最初の3桁の後は"‐(ハイフン)"かどうか
return False
for i in range(4,7):#👈3桁の数字で構成されているか
if not text[i].isdecimal():
return False
if text[7]!='-':#👈"‐(ハイフン)"かどうか
return False
for i in range(8,12):#👈4桁の数字で構成されているか
if not text[i].isdecimal():
return false
return True #👈全て一致すればTrueを返す
print('415-555-4242は電話番号:')
print(is_phone_number('415-555-4242'))
print('Moshi moshiは電話番号')
print(is_phone_number('Moshi moshi'))
これを実行すると
415-555-4242は電話番号:
True
Moshi moshiは電話番号
False
と表示される
※欠点:000-1111-222という表示の電話番号しか探せない。
##正規表現を使う場合
正規表現では\dは数字1文字を表す。
電話番号は
\d\d\d-\d\d\d-\d\d\d\dもしくは \d{3}-\d{3}-\d{4}と表せる
正規表現関数は reモジュールの中にあるので
import re をする
re.compile()で正規表現オブジェクトを生成できる。
import re
phone_num_regex=re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
mo = phone_num_regex.search('電話番号は415-555-4242')
print('電話番号がみつかりました:' + mo.group())
search()メソッドに検索対象の文字列を記入するとMatchオブジェクトを返す。
検索結果がなければNoneと表示される
Matchオブジェクトのgroup()メソッドを呼び出すと実際にマッチした文字列を取得する。