Pythonの正規表現で数字以外の文字のみをマッチ・抽出する方法
Pythonの正規表現(reモジュール)を使うと、文字列から数字以外の文字だけを簡単に抽出できます。パターン \D は「数字以外の1文字」にマッチし、\D+ と書くことで「数字以外の文字が1回以上連続している部分」にマッチします。
例:re.search()で最初のマッチを取得する
次のコードは、指定された文字列から数字以外の部分を正規表現でマッチさせます。
import re m = re.search(r'\D+', '5Need47for Speed 2') print(m)
出力
<re.Match object; span=(1, 5), match='Need'>
re.search() は文字列全体を走査し、パターンに一致した最初の部分をMatchオブジェクトとして返します。この例では、数字「5」の直後にある「Need」が最初に見つかった数字以外の連続部分です。
例:re.findall()ですべてのマッチをリストで取得する
次のコードは、指定された文字列内の数字以外の部分をすべて検索し、リストとして出力します。
import re m = re.findall(r'\D+', '5Need47for Speed 2') print(m)
出力
['Need', 'for Speed ']
re.findall() は、パターンに一致したすべての部分文字列をリスト形式で返します。この例では、数字(5、47、2)を除いた「Need」と「for Speed 」が抽出されています。
補足:\D と [^0-9] の関係
\D は [^0-9] と同等の意味を持ち、0〜9以外の任意の1文字にマッチします。逆に数字だけを抽出したい場合は \d を使用します。また、Unicodeモードでは全角数字なども「数字」として扱われるため、意図しない結果にならないよう注意してください。
-
Pythonの正規表現で単語以外の文字をマッチさせる方法
正規表現を使って文字列から「単語以外の文字」を取り出したい場合、Pythonのreモジュールに用意されている特殊シーケンス \W を使うのが最も簡単です。\W は、英字・数字・アンダースコア([^a-zA-Z0-9_])以外のすべての文字に一致します。以下のコードでは、指定した文字列から単語以外の文字をすべて抽出し、そのリストを出力しています。コード例import re s = ab5z8d*$&Y@ regx = re.compile(r\W) result = regx.findall(s) print(result)ポイントとして、パターン文字列の先頭に r を付けて raw 文字列に
-
【Python】正規表現を使って文字列内の単語をマッチ・抽出する方法
次のコードは、指定された文字列の中から「meeting」という単語を抽出します。ここでは肯定の先読み(look-ahead)と肯定の後読み(look-behind)アサーションを使用しています。これにより、単語を囲む文字の存在を条件として考慮しつつ、その文字自体はマッチ結果に含めないようにできます。コード例import re s = https://www.google.com/meeting_agenda_minutes.html result = re.findall(r(?<=[\W_])meeting(?=[\W_]), s) print(result)出力[meeting]パ