LoginSignup
0
0

文字列から条件に合う文字列を抽出する

Last updated at Posted at 2023-12-23

文字列から条件に合う文字列を抽出する

インポートとサンプル文字列

import re

text = '[りんご][ゴリラ][ラッパ][パンツ]'

findall()は全ての一致部分をリストで返す。

# そのまま抽出する
print(re.findall('\[(.*?)\]', text))

# コンパイルしてから抽出する。結果は同じ。
p = re.compile('\[(.*?)\]') #抽出指定:開始[  終了]  非貪欲マッチ*?
print(p.findall(text))
['りんご', 'ゴリラ', 'ラッパ', 'パンツ']

search() match() fullmatch()はマッチオブジェクトを返す。

  • search()では、マッチする部分が複数ある場合、最初のマッチ部分のみを返す。
  • match()が調べるのは先頭のみ。先頭にマッチする文字列がない場合はNoneを返す。
  • fullmatch()は、文字列全体が正規表現パターンにマッチしているかどうかの確認。
#以下では、上で作成した正規表現パターンオブジェクトを用いている。

p.search(text)
# <re.Match object; span=(0, 5), match='[りんご]'>

p.match(text)
# <re.Match object; span=(0, 5), match='[りんご]'>

p.fullmatch(text)
# <re.Match object; span=(0, 20), match='[りんご][ゴリラ][ラッパ][パンツ]'>

finditer()は全ての一致部分をイテレータで返す。

  • 要素はマッチオブジェクトなので、マッチした部分の位置なども取得できる。
p.finditer(text)
# <callable_iterator at 0x7a0995962710>

list(p.finditer(text))
# [<re.Match object; span=(0, 5), match='[りんご]'>,
#  <re.Match object; span=(5, 10), match='[ゴリラ]'>,
#  <re.Match object; span=(10, 15), match='[ラッパ]'>,
#  <re.Match object; span=(15, 20), match='[パンツ]'>]


for m in p.finditer(text):
    print(m)
# <re.Match object; span=(0, 5), match='[りんご]'>
# <re.Match object; span=(5, 10), match='[ゴリラ]'>
# <re.Match object; span=(10, 15), match='[ラッパ]'>
# <re.Match object; span=(15, 20), match='[パンツ]'>
0
0
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
0
0