Python正規表現で特定のパターンの繰り返し後の文字列を除外してマッチさせる方法
概要
Pythonの正規表現では、否定先読み(ネガティブ・ルックアヘッド)である (?!...) を使うことで、「特定のパターンが続いた場合にはマッチさせない」という条件を実現できます。
例えば、「数字の 2 が1回または2回繰り返された直後に 5 が来る文字列」を除外したい場合は、次のような正規表現を使用します。
^(?!2{1,2}5).*正規表現の構成要素
| ^ | 文字列の先頭を表します |
| (?! | 否定先読み:以降のパターンに一致する場合はマッチしない |
| |2{1,2}5) | 「2」が1回または2回続き、その後に「5」が来るパターン |
| .* | 上記以外の任意の文字列を受け入れます |
実行例
以下のコードは、この条件を満たす具体的な例です。「22」の後に「4」が続く文字列と、「22」の後に「5」が続く文字列を比較しています。
import re
foo = '2249678'
foo2 = '2259678'
result = re.findall(r'^(?!2{1,2}5).*', foo)
result2 = re.findall(r'^(?!2{1,2}5).*', foo2)
print(result)
print(result2)出力結果
実行すると、以下の出力が得られます。
['2249678'] []
「2249678」は「22」の直後に「4」が来るため条件に該当せず、正常にマッチします。一方、「2259678」は「22」の直後に「5」が来るため、否定先読み (?!2{1,2}5) の条件に引っかかり、マッチから除外されます。
このように、否定先読みを活用することで、特定の並び方をするパターンだけを柔軟に排除した文字列検索が可能になります。
-
Pythonで正規表現を使って空白以外の文字にマッチさせる方法
Pythonで正規表現を使って文字列中の「空白以外の文字」を照合するには、\S(大文字のS)という特殊シーケンスを使用します。\S はスペース・タブ・改行などの空白文字以外の任意の1文字にマッチし、+ を組み合わせることで、連続した空白以外の文字列(単語など)をまとめて取得できます。re.search() を使った例次のコードは、指定した文字列から最初に見つかった空白以外の文字の連なりを検索します。import re foo = re.search(r\S+, Need for Speed 2) print(foo)出力<re.Match object; span=(0, 4), mat
-
Pythonの正規表現で特定の文字から始まり、特定の文字で終わる部分をマッチさせる方法
文字列「TestCountry Hello」が与えられているとします。この文字列のうち、「T」で始まり「y」で終わる部分を抽出して表示するには、reモジュールのfindallメソッドを使用します。正規表現パターンには、単語境界のアンカー「\b」と、空白以外の任意の文字を表す「\S」を組み合わせます。 コード例 import re result = re.findall(r\bT\S+y\b, TestCountry Hello) print(result) 実行結果 上記のコードを実行すると、次の出力が得られます。 [TestCountry] パターンの解説 使用した正規表現パターン「\bT\