スポンサードリンク
どうも、とがみんです。
ある文章の中から、「URLのみを抜き出したい」、「無駄な文字列を省きたい」といったテキストの処理を行う際に、正規表現の知識があれば、一気に効率化することができます。
この記事では、正規表現とは何か、またPythonに用意されている正規表現の操作を提供するモジュール「re」について、その使い方を紹介していきます。
Contents
正規表現とは
正規表現とは、文字列の集合を1つの文字列で表現する方法です。
例えば、\dは「0〜9」のいずれか一文字を表す正規表現です。
以下に正規表現の例を紹介していきます。
任意の1文字を表す表現
正規表現 | 説明 | 使用例 | マッチする例 |
---|---|---|---|
. | 改行以外の任意の1文字 | a.c | abc, a1c, a!c ,a c |
\d | 任意の数字 | a\dc | a1c |
\D | 任意の数字以外 | a\Dc | abc, a!c |
\w | 任意の英数字 | a\wc | abc, a1c |
\W | 任意の英数字以外 | a\Wc | a!c |
\s | 空白文字 | a\sc | a c |
\S | 任意の空白文字以外 | a\Sc | abc, a1c, a!c |
文字列の先頭or末尾を表す表現
正規表現 | 説明 | 使用例 | マッチする例 |
---|---|---|---|
\A | 文字列の先頭 | \Aabc | abcdef |
\Z | 文字列の末尾 | abc\Z | defabc |
^ | 文字列の先頭 | ^abc | abcdef |
$ | 文字列の末尾 | abc$ | defabc |
繰り返しを表す表現
正規表現 | 説明 | 使用例 | マッチする例 |
---|---|---|---|
* | 0回以上の繰り返し | ab* | a, ab, abb, abbb |
+ | 1回以上の繰り返し | ab+ | ab, abb, abbb |
? | 0回または1回の繰り返し | ab? | a, ab |
{m} | m回の繰り返し | ab{2} | abb |
{m,n} | m〜n回の繰り返し | ab{2,4} | abb, abbb, abbbb |
集合
正規表現 | 説明 | 使用例 | マッチする例 |
---|---|---|---|
[] | 集合 | [a-c] | a,b,c |
| | 和集合 | a|b | a,b |
() | グループ化 | (ab) | ab |
Python正規化モジュール「re」について
正規化モジュール「re」の主なメソッドを紹介します。
メソッド | 概要 |
---|---|
match(パターン,文章) | 文章の先頭がパターンと一致するかどうかの判定。 |
search(パターン,文章) | パターンが文章のどこにマッチするのかを調べる。 |
findall(パターン,文章) | 文章からパターンにマッチする文字列を全て探し、リストに格納する。 |
sub(パターン, 文字列, 文章) | 文章からパターンにマッチするものを探し、文字列に置き換える。 |
パターンには抽出する正規表現、文章には調査する文章を入力します。
次に、それぞれのメソッドを使用した簡単な例を紹介していきます。
match
textListそれぞれの文の先頭が、httpとマッチするかどうかを判定しています。
「https://fresopiya.com/」はマッチしますが、「とがみんブログ」はマッチしないので、後者の出力はNoneです。
1 2 3 4 5 6 7 8 9 10 | import re textList = ["https://fresopiya.com/","とがみんブログ"] pattern = "http" result = [] for text in textList: result.append(re.match(pattern,text)) print(result) #出力:[<re.Match object; span=(0, 4), match='http'>, None] |
search
textのどこに、「自由」という文字が含まれているのかを調べています。マッチする箇所が複数あった場合、最初の箇所しか返しません。
1 2 3 4 5 6 7 8 | import re text = "場所にもお金にも時間にも、何にも縛られない自由な状態になったら一体人間は何をしてどこに向かうのか" pattern = "自由" result = re.search(pattern,text) print(result) #出力:<re.Match object; span=(21, 23), match='自由'> |
findall
textの中から、数字を探しだし、見つけた数字をリストに格納します。
1 2 3 4 5 6 7 8 | import re text = "平成31年3月29日" pattern = "\d"#任意の数字1字を表す正規表現 result = re.findall(pattern,text) print(result) #出力:['3', '1', '3', '2', '9'] |
sub
textの中の数字を省きます。
1 2 3 4 5 6 7 8 9 | import re text = "abcdef123456ghijkl" pattern = "\d" result = re.sub(pattern,"",text) print(result) #出力:abcdefghijkl |
まとめ
正規表現とは何か、またPythonに用意されている正規表現の操作を提供するモジュール「re」について紹介しました。
参考文献
スポンサードリンク
スポンサードリンク