LoginSignup
1
3

More than 3 years have passed since last update.

退屈なことはPythonにやらせよう 勉強記録 【正規表現】

Last updated at Posted at 2019-08-05

正規表現を使うと検索するパターンを指定することができる!
正規表現を使うとどれくらい短縮できるのか比較検討する。

※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()メソッドを呼び出すと実際にマッチした文字列を取得する。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3