17/05/04

python正規表現入門2「文字列の取得」


 

今回は文字列の取得をpythonの正規表現で行っていきます。
<html>Sample</html>を例に使用します。
最終的にはSample部分を取得します。

貪欲なマッチ

では実際に<html>のみを取得して見ます。
今まで通り<.*>と書けば動きそうです。

import re;
reg = "<.*>";
text = "<html>Sample</html>";
result = re.findall(reg, text);
# result -> ['<html>Sample</html>’]

しかしこれは、正しく動きません。
+、*、?といった量子は貪欲なマッチを試みる量指定子と呼ばれています。
貪欲なので、できるだけ多くのテキストにマッチするようになっています。

 

つまり、
“<“ではじまり任意の文字が0個以上連続し、最後に見つかった“>”で終わる
という正規表現になります。

非貪欲なマッチ

先ほどの貪欲なマッチを非貪欲なマッチにする方法としては
*?, +?, ??, {m,n}?
を利用します。

import re;
reg = "<.*?>";
text = "<html>Sample</html>";
result = re.findall(reg, text);
# result -> ['<html>', '</html>']

ただしく取得することができました。

 

ここでは
“<“ではじまり任意の文字が0個以上連続し、最初に見つかった“>”で終わる
というよう正規表現になります。

キャプチャ(捕捉)する

次に<html>&lt/html>の中の文字列をキャプチャしてみます。
キャプチャするには () を利用します。

reg = "^<.*?>(.*)<.*";
text = "<html>Sample</html>";
result = re.findall(reg, text);
# result -> ['Sample']

無事に文字列のみが取得できました。

 

終わりです。

 

参考記事
正規表現 HOWTO — Python 3.6.1 ドキュメント

スポンサーリンク

メールアドレスが公開されることはありません。

youya66

だらけとびびり、それとちょっぴりのてきとーさ。

コアラになってだらだらしながら愛されたい。