個人的に分かる範囲での正規表現
正規表現についての基本の基本を自分用にまとめる。
できるだけシンプルにまとめたかった。
他にもいろいろできるみたいだが、とりあえずはこれだけでもいろいろできそう。
ところどころ「・・・」とあるが、これは何か文字が入るという意味。
1文字の表し方
文字 | 概要 |
---|---|
[・・・] | 括弧内の文字の集合から1つ |
[^・・・] | 括弧内の文字以外の集合から1つ |
[a-z] | 小文字、大文字、数値など範囲した集合から1つ |
. | 任意の1文字 |
^ | 行頭 |
$ | 行末 |
バックスラッシュによる特殊な1文字
文字 | 概要 |
---|---|
\d | 数字(digit?)。[0-9]と等価。 |
\w | 英数字(word?) |
\s | スペースまたはタブ |
\t | タブ |
\n | 改行 |
[メタ文字] | メタ文字そのものを文字として利用したいときに\でエスケープ |
繰り返し系
文字 | 概要 |
---|---|
{n} | n回繰り返す |
{m,n} | mからn回繰り返す |
+ | 1回以上繰り返す |
* | 0回以上繰り返す |
? | 0回or1回。言い換えると省略可能な文字 |
+?, *? | 最小マッチ。マッチする中で+や*の繰り返しが最小限のもの。 |
文字をまとめる括弧
文字 | 概要 |
---|---|
(・・・) | 文字をまとめる。言い換えると文字列。 キャプチャしたい時にまとまりとして使用。 キャプチャは後述。 |
(?:・・・) | ()でまとめたいが、キャプチャしなくていいものを記録しない。 |
| | 〜または〜。(abc|def)など。 |
キャプチャ
一致するものの中の一部を取り出すことができる。()を使って実現する。
# 言語100本ノックの22問目より。 import sys import re lines = ["[[Category:イギリス|*]]", "[[Category:英連邦王国|*]]", "[[Category:G8加盟国]]", "[[Category:欧州連合加盟国]]", "[[Category:海洋国家]]", "[[Category:君主国]]", "[[Category:島国|くれいとふりてん]]", "[[Category:1801年に設立された州・地域]]"] pattern = r'\[\[Category:(.*?)(\|.*)?\]\]' for line in lines: for match in re.finditer(pattern, line): print(match.group(1))
()を2回使っているが、1つ目の括弧の中身がほしいので、group(1)で取り出している。
取り出し方は言語によって異なると思うが、大体は、1つ目、2つ目という感じで取れそう。