職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

Python正規表現--マッチオブジェクトの取得

2021年01月26日 | Python
パターンにマッチしたすべてのマッチオブジェクトを取得する(Pattern.finditer)

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【finditerメソッドの書式と使い方】
Pattern クラスの finditer メソッドは、対象の文字列の中でパターンにマッチしたすべてのマッチオブジェクトを取得するためのイテレータを取得する。

・書式
Pattern.finditer(string[, pos[, endpos]])
1 番目の引数に対象の文字列を、省略可能な 2 番目と 3 番目の引数には範囲を指定する。

サンプルコード
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import re
>>> msg = 'MA-52, JO-72, PP-45'
>>> pattern = re.compile(r'[A-Z]{2}-[0-9]{2}')
>>> result = pattern.finditer(msg)
>>> for m in result:
print(m.group())


MA-52
JO-72
PP-45
>>>

【パターンにキャプチャグループが設定されている場合】
パターンにキャプチャグループが設定されている場合、マッチオブジェクトからキャプチャグループにマッチした文字列を個別に取得することができます。
>>> import re
>>> msg = 'MA-52, JO-72, PP-45'
>>> pattern = re.compile(r'([A-Z]{2})-([0-9]{2})')
>>> result = pattern.finditer(msg)

>>> for m in result:
print('Match:' + m.group(0))
print('Group1:' + m.group(1))
print('Group2:' + m.group(2))


Match:MA-52
Group1:MA
Group2:52
Match:JO-72
Group1:JO
Group2:72
Match:PP-45
Group1:PP
Group2:45
>>>
【パターンにマッチしなかった場合の処理】
finditer メソッドを使う場合は戻り値がイテレータとなります
サンプルコード
>>> import re
>>> msg = 'Sample'
>>> pattern = re.compile(r'[A-Z]{2}-[0-9]{2}')
>>> result = pattern.finditer(msg)
>>> m = None
>>> for m in result:
print(m.group())


>>> if m is None:
print('Don\'t matched')


Don't matched
>>>
イテレータを使って取り出したマッチオブジェクトを格納する変数に対して、あらかじめ None を設定しておきます
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Python正規表現---マッチデータのリスト化

2021年01月26日 | Python
パターンにマッチしたすべての文字列をリストで取得する(Pattern.findall)


【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【findallメソッドの書式と使い方】
Pattern クラスの findall メソッドは、対象の文字列の中でパターンにマッチしたすべての文字列をリストとして取得することが出来る。

・書式
Pattern.findall(string[, pos[, endpos]])

1 番目の引数に対象の文字列を、省略可能な 2 番目と 3 番目の引数は対象の文字列の中でマッチするかどうかをチェックする範囲を指定する。

サンプルコード
>>> import re
>>> msg = 'MA-52, JO-72, PP-45'
>>> pattern = re.compile(r'[A-Z]{2}-[0-9]{2}')←r’ ’はエスケープ
>>> result = pattern.findall(msg)
>>> if (len(result) == 0):
print('Don\'t matched')
else:
for s in result:
print(s)


MA-52
JO-72
PP-45
>>>

【キャプチャグループがパターンに設定されている場合】
パターンにキャプチャグループが設定されている場合、キャプチャグループ毎にマッチした文字列を要素として持つタプルのリストを返します。

サンプルコード
>>> import re
>>> msg = 'NB-52,JA-73,PQ-56'
>>> pattern = re.compile(r'([A-Z]{2})-([0-9]{2})')
>>> result = pattern.findall(msg)
>>> if (len(result) == 0):
print('Don\'t matched')
else:
for s in result:
print(s)


('NB', '52')
('JA', '73')
('PQ', '56')
>>>
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Python正規表現--フルマッチ

2021年01月24日 | Python
文字列の全体がパターンとマッチするか調べる

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【fullmatchメソッドの書式と使い方】
fullmatch メソッドは、対象の文字列全体がパターンとマッチするかどうかを調べる。対象の文字列の一部分でマッチする場合も fullmatch メソッドではマッチとはなりません。

・書式
Pattern.fullmatch(string[, pos[, endpos]])
1 番目の引数に対象の文字列。省略可能な 2 番目と 3 番目の引数には、対象の文字列の中でマッチするかどうかをチェックする範囲を指定する。

サンプルコード
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import re
>>> def checkMatch(msg, pat):
pattern = re.compile(pat)
result = pattern.fullmatch(msg)←フルマッチ
if result :
print(result.group(0))
else :
print('Don\'t matched')


>>> checkMatch('東京都港区赤坂', r'東.*区')
Don't matched
>>> checkMatch('東京都港区赤坂', r'東.*坂')
東京都港区赤坂
>>>

【チェックする範囲を設定する】
>>> import re
>>> def checkMatch(msg, pattern, start, end):
result = pattern.fullmatch(msg, start, end)
if result :
print(result.group(0))
else :
print('Don\'t matched')


>>> msg = '東京都港区赤坂'
>>> pattern = re.compile(r'港区')
>>> checkMatch(msg, pattern, 0, 5)
Don't matched
>>> checkMatch(msg, pattern, 3, 5)
港区
>>>
fullmatch メソッドは文字列全体がパターンとマッチするかどうか調べますが、対象の文字列の範囲を設定した場合は、設定した範囲の文字列全体がパターンとマッチするかどうか調べるため 2 回目はマッチしました
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Python正規表現--パターンマッチ

2021年01月23日 | Python
文字列の先頭位置からパターンとマッチするか調べる

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【match メソッド】
search メソッド→対象の文字列のいずれかの場所でパターンとマッチするかどうかを調べる。
match メソッド→対象の文字列の先頭位置でパターンとマッチするかどうかを調べる。

・matchメソッドの書式
Pattern.match(string[, pos[, endpos]])
1 番目の引数に対象の文字列。
2 番目と 3 番目の省略可能な引数には、対象の文字列の中でマッチするかどうかをチェックする範囲を指定する。

サンプルコード
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import re
>>> def checkMatch(msg, pat):
pattern = re.compile(pat)
result = pattern.match(msg)
if result :
print(result.group(0))
else :
print('Don\'t matched')

>>> checkMatch('東京都港区赤坂', r'東京.')
東京都
>>> checkMatch('東京都港区赤坂', r'港.')←先頭じゃない
Don't matched
>>>

【チェックする範囲を設定する】
match メソッドの 2 番目と 3 番目の引数を指定することで、対象の文字列の中のチェックする範囲を設定する事が出来る。

例えば、
文字列を '東京都港区赤坂' にし、 2 番目と 3 番目の引数を省略した場合
対象は '東京都港区赤坂' になる。
しかし、2 番目の引数に 3 、 3番目の引数に 6 を指定した場合
対象は、'港区赤'になる

サンプルコード
>>> import re
>>> def checkMatch(msg, pattern, start, end):
result = pattern.match(msg, start, end)
if result :
print(result.group(0))
else :
print('Don\'t matched')

>>> msg = '東京都港区赤坂'
>>> pattern = re.compile(r'港区')
>>> checkMatch(msg, pattern, 0, 7)
Don't matched
>>> checkMatch(msg, pattern, 3, 7)
港区
>>>


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Python正規表現--パターンサーチ

2021年01月22日 | Python
文字列のいずれかの位置でパターンとマッチするか調べる(Pattern.search)

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【searchメソッドの書式と使い方】
Pattern クラスの search メソッドは、対象の文字列を先頭から順にパターンがマッチするかどうかを調べる。

・書式
Pattern.search(string[, pos[, endpos]])
1 番目の引数→対象の文字列
2 番目と 3 番目の引数→対象の文字列の中でマッチするかどうかをチェックする範囲

Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import re
文字列
>>> msg = 'lemon, apple, peach'
パターンマッチ
>>> pattern = re.compile(r'apple')
マッチオブジェクト(サーチ)
>>> result = pattern.search(msg)
>>> if result :
print('Matched')
else :
print('Don\'t matched')

判定結果
Matched
>>>

【マッチした文字列を取得する】
search メソッドの戻り値としてマッチオブジェクトを取得したら、 Match クラスで用意されているメソッドを使ってパターンにマッチした部分の文字列を取得したり、マッチした部分の文字列の中のインデックスを取得することが出来る。

サンプルコード
>>> import re
>>> #関数
>>> def checkMatch(msg, pattern):
result = pattern.search(msg)
if result :
print(result.group(0))
else :
print('Don\'t matched')

>>> #パタンのコンパイル
>>> pattern = re.compile(r'apple')
>>> #パターンにマッチした文字列全体を取得
>>> checkMatch('lemon, apple, peach', pattern)
apple
>>> #マッチしない場合
>>> checkMatch('grapes, cherry', pattern)
Don't matched
>>>

【チェックする範囲を設定する】
search メソッドの 2 番目と 3 番目の引数を指定することで、対象の文字列の中のチェックする範囲を設定することが出来る。

サンプルコード
>>> import re
>>> #関数
>>> def checkMatch(msg, pattern, start, end):
result = pattern.search(msg, start, end)
if result :
print(result.group(0))
else :
print('Don\'t matched')


>>> #文字列
>>> msg = '東京都港区赤坂'
>>> #パターン
>>> pattern = re.compile(r'東京')
>>> checkMatch(msg, pattern, 0, 7)
東京
>>> checkMatch(msg, pattern, 1, 4)
Don't matched
>>>
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする