LoginSignup
20
21

More than 3 years have passed since last update.

Pythonで正規表現を使ってみた

Last updated at Posted at 2019-04-09

正規表現とは

正規表現はメタ文字と呼ばれる文字を使用して、
文字列の検索や抽出、置換などを行うことが出来ます。

Pythonでは標準ライブラリで提供されている、
reモジュールをimportして正規表現を使用します。
reはregular expressionの略です。

基本的な使い方としては、
正規表現のパターンと対象となる文字列をreモジュールの
用途に合わせたメソッドに引数として渡してその結果を取得します。

検索関連

matchメソッド

文字列の先頭でパターンがマッチするかどうか判定。
matchObject(オブジェクト)が返ります。

matchObject(オブジェクト)が返る = re.match(パターン, 対象の文字列)

そのオブジェクトから値を取り出すメソッド。
使い方はそれぞれ、

matchObject.group() 正規表現にマッチした文字列が返る
matchObject.start() マッチの開始位置が返る
matchObject.end() マッチの終了位置が返る
matchObject.span() マッチの位置 (start, end) を含むタプルが返る

searchメソッド

文字列全体とパターンにマッチする箇所を判定。
複数マッチした場合でも、取得できるのは初めにマッチしたもののみ。

re.search(パターン, 対象のテキスト)

findallメソッド

文字列中にパターンでマッチした文字列を返す。
パターンにグループが含まれる場合は文字列のタプルが返す。

re.findall(パターン, 対象のテキスト)

置換関連

subメソッド

文字列置換を行います。

re.sub(パターン, 置換後の文字, 元のテキスト)

splitメソッド

文字列を指定した正規表現で分割します。

re.split(パターン, 対象の文字列)

メタ文字

正規表現において、パターン化した文字列のことをメタ文字と言います。
公式にもありますが、reモジュールはPerlの強力な正規表現マッチング操作が使えます。

表記 意味
. 任意の一文字
^ 行の先頭
$ 行の末尾
* 0回以上の繰り返し
+ 1回以上の繰り返し
? 0回または1回
\d 数字[0-9]
\D 数字以外[^0-9]
\s 空白文字[\t\n\r\f\v]
\S 空白文字以外[^\t\n\r\f\v]
\w 英数字
\W 英数字以外
\A 文字列の先頭
\Z 文字列の末尾
+ 直前の文字が1回以上出現
* 直前の文字が0回以上出現
? 直前の文字が0回もしくは1回出現
[abc] 列挙された文字群に含まれる文字
[^abc] 列挙された文字群に含まれない文字
[a-b] 指定された範囲に含まれる文字
[~a-b] 指定された範囲に含まれない文字
(abc) グループ化
(?=abc) 先読み
(?!abc) 否定先読み
(?<=abc) 後読み
(?<!abc) 否定後読み

実際にPythonで正規表現を使ってみる

まずはreモジュールをimportします。

今回はブラケット(角括弧)で囲まれた間の文字列のみを取得する正規表現を
書いてみます。

sample.py
import re

text = 'Hello[Wor]ld!'
pattern = '(?<=\[)[^]]+(?=\])'

result = re.search(pattern, text)

print(result)

結果

<re.Match object; span=(6, 9), match='Wor'>

正解は他にも色々あると思いますが、
このように正規表現で欲しい値を取得することが出来ました。

参考

Python 3.7.3 ドキュメント
https://docs.python.org/ja/3/library/re.html

Python学習講座
https://www.python.ambitious-engineer.com/archives/1798

分かりやすいpythonの正規表現の例
https://qiita.com/luohao0404/items/7135b2b96f9b0b196bf3

20
21
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
20
21