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_/:%#\
amp;\?\(\)~\.=\+\-]+
以下がサンプルになります。
import re
str1 = url is http://www.google.co.jp/
pattern = r(http|https)://[a-zA-Z0-9_/:%#\
amp;\?\(\)~\.=\+\-]+ 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'>