Python バックエンド

Pythonの正規表現でよく使うパターンのテンプレート

こんにちは!TodoONadaの土門(@shimidai2100)です。

Pythonの正規表現でよく使うパターンをまとめました。

以下が今回の記事でマッチさせる正規表現のパターンになります。

もちろんPythonの標準ライブラリreオブジェクトも必要です。

アルファベット:[a-z]、[A-Z]、[a-zA-Z]

アルファベットで小文字、大文字、小文字/大文字両方のマッチパターンは以下です。

# 小文字のアルファベットa~zをマッチ
[a-z]

# 大文字のアルファベットA~Zをマッチ
[A-Z]

# 小文字・大文字問わずアルファベットA~Zをマッチ
[a-zA-Z]

サンプルは以下になります。

import re

str="1234567890aBC1234567890"

pattern1=r"[a-z]"
pattern2=r"[A-Z]"
pattern3=r"[a-zA-Z]"

lowstring=re.search(pattern1,str)
upperstring=re.search(pattern2,str)
allstring=re.findall(pattern3,str)

print("Lowercase:",lowstring)
print("Uppercase:",upperstring)
print("All alphabet:",allstring)

数値:[0-9]

数値の正規表現マッチパターンは以下です。

# 0~9の数字をマッチ
[0-9]

# 1~5の数字をマッチ
[1~5]

# 1,2だけをマッチ
[12]

サンプルは以下になります。

import re

str='i know 3v3r1th1ng abou2 python'

pattern =r"[0-9]"

num = re.search(pattern, str)
numlist=re.findall(pattern,str)

print("re.search:",num)
# re.search: <re.Match object; span=(7, 8), match='3'>

print("re.findall:",numlist)
# re.findall: ['3', '3', '1', '1', '2']

電話番号

電話番号の正規表現パターンは以下です。

# 一般的な電話番号
[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}

# 携帯電話
0[789]0-[0-9]{4}-[0-9]{4}

# 03で始まる
03-[0-9]{2,4}-[0-9]{3,4}

以下がサンプルになります。

import re

str1='phonenumberis12-3456-7890'
str2='phonenumberis1234-56-7890'
str3='phonenumberis1234-567-890'
str4='phonenumberis123-4567-7890'
pattern =r"[0-9]{2,4}-[0-9]{2,4}-[0-9]{2,4}"

phone_number1 = re.search(pattern, str1)
phone_number2 = re.search(pattern, str2)
phone_number3 = re.search(pattern, str3)
phone_number4 = re.search(pattern, str4)

print("str1",phone_number1)
# str1 <re.Match object; span=(13, 25), match='12-3456-7890'>
print("str2",phone_number2)
# str2 <re.Match object; span=(13, 25), match='1234-56-7890'>
print("str3",phone_number3)
# str3 <re.Match object; span=(13, 25), match='1234-567-890'>
print("str4",phone_number4)
# str4 <re.Match object; span=(13, 26), match='123-4567-7890'>

住所(○○県XX市)

都道府県+市町村のパターンをマッチさせるは以下になります。

# 都道府県+市町村
(...??[都道府県])(.+?[区市区町村])(.+)

サンプルは以下になります。

import re

s_nums = 'My address is:東京都港区六本木6丁目9−1'

pattern=r"(...??[都道府県])(.+?[区市区町村])(.+)"

address = re.search(pattern,s_nums)

print(address)
# <re.Match object; span=(13, 28), match=':東京都港区六本木6丁目9−1'>

URL

URLの正規表現マッチパターンは以下です。

# http/httpsドメインを取得
(http|https)://[a-zA-Z0-9_/:%#$&\?\(\)~\.=\+\-]+

以下がサンプルになります。

import re

str1 = "url is http://www.google.co.jp/"

pattern = r"(http|https)://[a-zA-Z0-9_/:%#$&\?\(\)~\.=\+\-]+"
url = re.search(pattern, str1)
print(url)
# <re.Match object; span=(7, 31), match='http://www.google.co.jp/'>

IPアドレス

IPv4アドレスをマッチするパターンです。

# IPv4アドレス
(?:[0-9]{1,3}\.){3}[0-9]{1,3}

以下がサンプルになります。

import re

str1='fakeip:123.333.444     realip:123.234.456.678'

pattern =r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b"

ip = re.search(pattern, str1)

print(ip)
# <re.Match object; span=(30, 45), match='123.234.456.678'>

郵便番号

7桁の郵便番号は以下になります。

# 3桁―4桁の一般的な郵便番号
[0-9]{3}-[0-9]{4}

以下がサンプルになります。

import re

str1='fake postal code:1234-5678 postal code:123-4567'

pattern =r"\b[0-9]{3}-[0-9]{4}\b"

pscode = re.search(pattern, str1)

print(pscode)
# <_sre.SRE_Match object; span=(17, 25), match='123-4567'>

HTMLタグ

pタグやaタグなどのHTMLタグをマッチさせるのは以下になります。

# 開始タグと終了タグを取得
<[^>]*?>

以下がサンプルになります。

import re

str1= ''' 
<p>Python Practice</p>
<div class="nothing">
nothing
</div>
<section 
class="partone">
nothing
</section>
'''

pattern ="<[^>]*?>"

taglist=re.findall(pattern,str1)

print(taglist)

# ['<p>', '</p>', '<div class="nothing">', '</div>', '<section \nclass="partone">', '</section>']

画像ファイル(jpg/gif/png)

jpg、git、pngを正規表現でマッチさせるのは以下になります。

# 画像ファイルをマッチ
[a-zA-Z0-9\_-]+\.(jpg|gif|png)

以下がサンプルになります。

import re

image_list=["aaa.lol","bbb.png","ccc.gif","ddd.jpg","eee.tot"]

pattern = r"[a-zA-Z0-9\_-]+\.(jpg|gif|png)"

for image in image_list:
    i = re.search(pattern,image)
    print(i)

# None
# <_sre.SRE_Match object; span=(0, 7), match='bbb.png'>
# <_sre.SRE_Match object; span=(0, 7), match='ccc.gif'>
# <_sre.SRE_Match object; span=(0, 7), match='ddd.jpg'>
# None

ドメイン(.com/.netなど)

yahoo.comなどのドメインをマッチさせるのは以下になります。

# 一般的な英数字ドメイン
([a-zA-Z0-9][a-zA-Z0-9\-]{1,61}[a-zA-Z0-9]\.)+[a-zA-Z]+

以下がサンプルになります。

import re

str1 = "Domain is google.com"

pattern = r"([a-zA-Z0-9][a-zA-Z0-9\-]{1,61}[a-zA-Z0-9]\.)+[a-zA-Z]+"

domain = re.search(pattern,str1)

print(domain)
# <_sre.SRE_Match object; span=(10, 20), match='google.com'>

日付(yyyy/mm/dd)

日付形式のyyyy/mm/ddやyyyy-mm-ddなどは以下でマッチすることが出来ます。

# 日付型形式
[0-9]{4}[^0-9][0-9]{1,2}[^0-9][0-9]{1,2}

以下がサンプルになります。

import re

str1='Date 1 is:2020/05/10'
str2='Date 2 is:2020/1/15'
str3='Date 3 is:2020-05-10'
       
pattern =r"[0-9]{4}[^0-9][0-9]{1,2}[^0-9][0-9]{1,2}"
date1 = re.search(pattern, str1)
date2 = re.search(pattern,str2)
date3 = re.search(pattern,str3)

print(date1)
# <_sre.SRE_Match object; span=(8, 18), match='2020/05/10'>
print(date2)
# <_sre.SRE_Match object; span=(7, 16), match='2020/1/15'>
print(date3)
# <_sre.SRE_Match object; span=(10, 20), match='2020-05-10'>

メールアドレス

xxxxx.comなどのメールアドレスは以下になります。

# .comなどメールアドレス
[a-zA-Z0-9_.+-]+@(?:[a-zA-Z0-9]+\.){1,}[a-zA-Z0-9]+

以下がサンプルになります。

import re
 
str1="My email address is pythonisgood@gmail.com"

pattern = r"[a-zA-Z0-9_.+-]+@(?:[a-zA-Z0-9]+\.){1,}[a-zA-Z0-9]+"

email=re.search(pattern,str1)

print(email)
# <_sre.SRE_Match object; span=(20, 42), match='pythonisgood@gmail.com'>

ツイッターID(@xxxxxxxxxx)

TwitterのIDをマッチさせる場合には@マークを利用します。

# TwitterのIDを取得
@[a-zA-Z0-9_]+

以下がサンプルになります。

import re
 
str1="My twitter-id is @helloworld"

pattern = r"@[a-zA-Z0-9_]+"

twitterid=re.search(pattern,str1)

print(twitterid)
# <_sre.SRE_Match object; span=(17, 28), match='@helloworld'>

関連記事

-Python, バックエンド

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.