Pythonで正規表現を使いこなすための基本から応用までの使い方を解説します。
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi2_nayamu.png)
Pythonで正規表現を使った文字列処理について教えてほしいです。
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
Pythonの re
モジュールを使って、正規表現を扱うことができます。re.search()
関数を使って、文字列の中から正規表現のパターンに一致する文字列を検索したり、re.findall()
関数を使って、正規表現のパターンに一致するすべての文字列を取得したりすることができます。
正規表現とは
正規表現(Regular Expression)とは、文字列のパターンを表すための特殊な記法です。正規表現を使うことで、指定したパターンに一致する文字列を検索、置換することができます。Pythonでは、標準ライブラリのre
モジュールを使って正規表現を扱うことができます。
正規表現の基本的な使い方は、文字列の一部を表すパターンや、文字集合を表すパターン、任意の文字を表すパターン、繰り返しを表すパターンなどを使って、文字列のパターンを表現します。例えば、a
という文字を表すパターンは a
です。a
または b
という文字を表すパターンは [ab]
です。
a
または b
または c
という文字を表すパターンは [abc]
です。a
または b
または c
以外の文字を表すパターンは [^abc]
です。
正規表現のパターンを指定した上で、Pythonの re
モジュールを使って文字列の検索や置換を行うことができます。re.search()
関数を使えば、指定したパターンに一致する最初の文字列を検索できます。re.findall()
関数を使えば、指定したパターンに一致するすべての文字列を取得できます。re.sub()
関数を使えば、指定したパターンに一致する文字列を置換できます。
正規表現は、メールアドレスやURLなどの文字列の検索や置換にも使うことができます。ただし、正規表現を使って文字列のパターンを表現する場合、正しいパターンを指定することが重要です。正規表現のパターンを指定するときには、指定したい文字列のパターンをよく考え、正しいパターンを作成することが大切です。
正規表現の基本的なパターン
正規表現には、文字列のパターンを表現するための基本的なパターンがあります。以下では、正規表現の基本的なパターンについて説明します。
文字列の一部を表すパターン
文字列の一部を表すパターンは、指定した文字列が出現する場所を指定するために使われます。たとえば、sample
という文字列が含まれている箇所を指定する場合、正規表現のパターンとして sample
を指定します。
文字集合を表すパターン
文字集合を表すパターンは、複数の文字の中から一致するものを指定するために使われます。たとえば、a
または b
という文字が含まれている箇所を指定する場合、正規表現のパターンとして [ab]
を指定します。また、a
または b
または c
という文字が含まれている箇所を指定する場合、正規表現のパターンとして [abc]
を指定します。
任意の文字を表すパターン
任意の文字を表すパターンは、任意の文字に一致するものを指定するために使われます。たとえば、任意の文字が含まれている箇所を指定する場合、正規表現のパターンとして .
を指定します。
繰り返しを表すパターン
繰り返しを表すパターンは、指定した文字列の繰り返しを指定するために使われます。たとえば、a
が1回以上繰り返されている箇所を指定する場合、正規表現のパターンとして a+
を指定します。また、a
が0回以上繰り返されている箇所を指定する場合、正規表現のパターンとして a*
を指定します。
これらの基本的なパターンを使うことで、正規表現で文字列のパターンを表現することができます。ただし、正規表現はパターンが複雑になると扱いにくくなるため、パターンをうまく使い分けることが大切です。
正規表現を使った文字列の検索
正規表現を使った文字列の検索には、Pythonの re
モジュールの re.search()
関数を使います。re.search()
関数は、指定した正規表現のパターンに一致する最初の文字列を検索して、Match
オブジェクトを返します。検索に成功した場合は Match
オブジェクトが返され、失敗した場合は None
が返されます。
以下は、re.search()
関数を使って、text
という文字列中に pattern
という正規表現のパターンが含まれているかどうかを検索する例です。
import re
text = "This is a sample text."
pattern = "sample"
result = re.search(pattern, text)
if result:
print("Matched")
else:
print("Not matched")
上記のプログラムでは、re.search()
関数を使って、pattern
に一致する最初の文字列を検索し、Match
オブジェクトが返されます。検索に成功した場合は Matched
が出力され、失敗した場合は Not matched
が出力されます。
また、複数の箇所に一致する文字列を検索する場合には、re.findall()
関数を使います。re.findall()
関数は、指定した正規表現のパターンに一致するすべての文字列を取得し、リストで返します。以下は、re.findall()
関数を使って、text
中の i
という文字をすべて取得する例です。
import re
text = "This is a sample text."
pattern = "i"
result = re.findall(pattern, text)
print(result)
上記のプログラムでは、re.findall()
関数を使って、pattern
に一致するすべての文字列を取得し、result
に代入しています。結果は、['i', 'i', 'i']
というリストになります。
正規表現を使った文字列の検索は、Pythonの re
モジュールを使うことで簡単に行うことができます。検索する文字列やパターンに応じて、re.search()
関数や re.findall()
関数を使い分けることが重要です。
正規表現を使った文字列の置換
正規表現を使った文字列の置換には、Pythonの re
モジュールの re.sub()
関数を使います。re.sub()
関数は、指定した正規表現のパターンに一致するすべての文字列を、指定した置換文字列で置換します。置換した結果の文字列を返します。
以下は、re.sub()
関数を使って、text
という文字列中の pattern
という正規表現のパターンに一致する文字列を、replacement
という文字列で置換する例です。
import re
text = "This is a sample text."
pattern = "sample"
replacement = "example"
result = re.sub(pattern, replacement, text)
print(result)
上記のプログラムでは、re.sub()
関数を使って、pattern
に一致するすべての文字列を、replacement
で置換しています。結果は、This is a example text.
という文字列になります。
また、re.sub()
関数には、第4引数として count
を指定することもできます。count
は、置換する回数を指定するために使います。以下は、count
を指定して、最初の1回だけ置換する例です。
import re
text = "This is a sample text. Sample is a good word."
pattern = "sample"
replacement = "example"
result = re.sub(pattern, replacement, text, count=1)
print(result)
上記のプログラムでは、count
に1を指定しているため、最初の1回だけ置換が行われます。結果は、This is a example text. Sample is a good word.
という文字列になります。
正規表現を使った文字列の置換は、re.sub()
関数を使うことで簡単に行うことができます。検索する文字列やパターン、置換する文字列に応じて、re.sub()
関数を使い分けることが重要です。
正規表現の応用例:メールアドレスやURLの抽出
正規表現は、メールアドレスやURLなどの特定のパターンを持つ文字列の検索や置換にも使うことができます。以下では、メールアドレスやURLの抽出について説明します。
メールアドレスの抽出
メールアドレスは、user@example.com
のような形式をしています。正規表現を使ってメールアドレスを抽出する場合は、以下のようなパターンを使います。
import re
text = "my email address is user@example.com."
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
result = re.search(pattern, text)
if result:
print(result.group(0))
上記のプログラムでは、メールアドレスを表す正規表現のパターンを指定して、re.search()
関数を使ってメールアドレスを抽出しています。結果は、user@example.com
という文字列になります。
URLの抽出
URLは、https://www.example.com
のような形式をしています。正規表現を使ってURLを抽出する場合は、以下のようなパターンを使います。
import re
text = "visit my website at https://www.example.com."
pattern = r'https?://[\w/:%#\$&\?\(\)~\.=\+\-]+'
result = re.search(pattern, text)
if result:
print(result.group(0))
上記のプログラムでは、URLを表す正規表現のパターンを指定して、re.search()
関数を使ってURLを抽出しています。結果は、https://www.example.com
という文字列になります。
正規表現を使ったメールアドレスやURLの抽出は、文字列のパターンをよく考え、正しいパターンを指定することが重要です。正しいパターンを指定することで、高精度な抽出が行えます。
まとめ
Pythonで正規表現を使いこなすための基本から応用までの使い方を解説しました。
- 正規表現は、文字列のパターンを表現するための方法である。
- Pythonの
re
モジュールを使って、正規表現を扱うことができる。 re.search()
関数を使って、文字列の中から正規表現のパターンに一致する文字列を検索することができる。re.findall()
関数を使って、文字列の中から正規表現のパターンに一致するすべての文字列を取得することができる。re.sub()
関数を使って、文字列の中から正規表現のパターンに一致するすべての文字列を指定した文字列で置換することができる。- 正規表現を使って、メールアドレスやURLなどの特定のパターンを持つ文字列を検索や置換することができる。
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi2_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi2_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi2_normal.png)
正規表現は文字列のパターンを表現するための強力なツールですね!
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
正規表現は、文字列のパターンを表現するための便利なツールですが、パターンが複雑になると扱いにくくなることがあります。正しいパターンを指定することが重要です。また、パターンをうまく使い分けることで、より高度な文字列処理を実現することができます。
コメント