0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

re.compileは何に使う?

Posted at

はじめに

re.compileが何のためにあるのかよくわからず使っていなかったが、正規表現のパターンを再利用するときに便利であることがわかったのでまとめる。

目次

re.compileの使い方

re.compileは正規表現のパターンをオブジェクト化する手法。re.compileで定義した正規表現のパターンは、re.XXXで使用できる。reの部分を定義したオブジェクトに置き換えて使用する。例えばP = re.compile(r'[0-9]+')でPというオブジェクトを定義すると。

オブジェクト使う オブジェクト使わない
P.search(string) re.search(r'[0-9]+', string)
P.match(string) re.match(r'[0-9]+', string)
P.split(string) re.split(r'[0-9]+', string)
P.sub(repl, string) re.sub(r'[0-9]+', repl, string)
import re

# a~zの文字列の正規表現パターンをオブジェクト化
alphabet_atoz = re.compile(r'[a-z]+')
print(f'# {alphabet_atoz=} / {type(alphabet_atoz)}')
# alphabet_atoz=re.compile('[a-z]+') / <class 're.Pattern'>

#オブジェクトを使って、 re.match()をする。
str_data = "ABCDEabcdeあいうえお01234"
print(f'# {alphabet_atoz.search(str_data)=}')
# alphabet_atoz.search(str_data)=<re.Match object; span=(5, 10), match='abcde'>

戻る

正規表現のパターンをオブジェクトを辞書にしてみる。

オブジェクトを辞書化することもできた。使い道はパッと思いつかないけど、よく使う正規表現パターンを辞書化しておいて、再利用すると便利かも。

import re

# パターンを辞書で定義。
P_char={
    "半角小文字":re.compile(r'[a-z]+'),
    "半角大文字":re.compile(r'[A-Z]+'),
    "半角英字"  :re.compile(r'[a-z|A-Z]+'),
    "半角数字"  :re.compile(r'[0-9]+')
}

str_data = "ABCDEabcdeあいうえお01234"

print(P_char["半角小文字"].search(str_data))
print(P_char["半角大文字"].search(str_data))
print(P_char["半角英字"].search(str_data))
print(P_char["半角数字"].search(str_data))

# <re.Match object; span=(5, 10), match='abcde'>
# <re.Match object; span=(0, 5), match='ABCDE'>
# <re.Match object; span=(0, 10), match='ABCDEabcde'>
# <re.Match object; span=(15, 20), match='01234'>

戻る

以上

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?