Pythonで文字列を特定の区切り文字で分割する方法について解説します。
Contents
文字列を特定の区切り文字で分割する方法
プログラムでは文字列を特定の区切り文字で分割するといったことをよくします。この際には、以下のメソッドを使用することができます。
- 特定の区切り文字で分割する:split, rsplit
- 改行文字で分割する:splitlines
- 特定の区切り文字で2分割する:partition, rpartition
本記事では、各メソッドの使い方を簡単な例を用いて説明します。
文字列を特定の区切り文字で分割する方法
文字列を特定の区切り文字で分割する場合には、splitやrsplitメソッドが使用できます。
前方から文字列を分割する split
前方から文字列を分割する場合には、以下のようにsplitメソッドを使用します。
sample_text1 = "Python Java C C++ C# Go" sample_text2 = "Python|Java|C|C++|C#|Go" # ===== 前方から分割する split # 空白文字で分割 print("--- 空白で分割") print(sample_text1.split()) # 指定文字で分割 print("--- 指定文字で分割") print(sample_text2.split("|"))
【実行結果】 --- 空白で分割 ['Python', 'Java', 'C', 'C++', 'C#', 'Go'] --- 指定文字で分割 ['Python', 'Java', 'C', 'C++', 'C#', 'Go']
splitは引数を省略した場合、空白文字を区切り文字として文字列を分割します。
ここでいう空白文字には半角文字だけではなく全角文字、水平タブ(\t)、垂直タブ(\v)、改行文字(\r, \n)、改ページ(\f)といったものも含んでいる点に注意してください。
また、引数に区切り文字を指定することで任意の区切り文字で分割することも可能です。上記例では、「|」で分割を行っています。
後方から文字列を分割する rsplit
後方から文字列を分割する場合には、以下のようにrsplitメソッドを使用します。
sample_text1 = "Python Java C C++ C# Go" sample_text2 = "Python|Java|C|C++|C#|Go" # ===== 後方から分割する rsplit # 空白文字で分割 print("--- 空白で分割") print(sample_text1.rsplit()) # 指定文字で分割 print("--- 指定文字で分割") print(sample_text2.rsplit("|"))
【実行結果】 --- 空白で分割 ['Python', 'Java', 'C', 'C++', 'C#', 'Go'] --- 指定文字で分割 ['Python', 'Java', 'C', 'C++', 'C#', 'Go']
引数の考え方は、splitメソッドと同様です。
splitとrsplitの処理結果が変わる場合
上記でsplitとrsplitの実行結果を見てきましたが、処理結果は同じでした。splitとrsplitの違いが発生するのは、最大分割数を指定した場合です。最大分割数は、以下のようにmaxsplit引数で指定します。
sample_text1 = "Python Java C C++ C# Go" sample_text2 = "Python|Java|C|C++|C#|Go" # ===== splitとrsplitの分割結果が変わる場合 # 空白文字で分割 print("--- 空白で分割") print(sample_text1.split(maxsplit=3)) print(sample_text1.rsplit(maxsplit=3)) # 指定文字で分割 print("--- 指定文字で分割") print(sample_text2.split("|", maxsplit=3)) print(sample_text2.rsplit("|", maxsplit=3)) # # 位置引数で指定してもよい # print(sample_text2.split('|', 3)) # print(sample_text2.rsplit('|', 3))
【実行結果】 --- 空白で分割 ['Python', 'Java', 'C', 'C++ C# Go'] ['Python Java C', 'C++', 'C#', 'Go'] --- 指定文字で分割 ['Python', 'Java', 'C', 'C++|C#|Go'] ['Python|Java|C', 'C++', 'C#', 'Go']
上記の例では、最大分割数(maxsplit)として3を指定しています。
splitは前方から3つに分割され、残りの文字列はまとめられたままになります。一方で、rsplitは後方から3つ分割されて、残りの文字列はまとめられます。
また、最大分割数(maxsplit)は、区切り文字とあわせて指定する場合には、sample_text2.split(“|”, 3)のように位置引数として指定しても同じです。(サンプルではコメントアウトしています)
このようにsplitとrsplitでは最大分割数(maxsplit)を指定した時に結果が変わります。
文字列を改行文字で分割する方法 splitlines
文章のテキスト等を扱う場合、改行で一文ずつ分割したい時があります。このような場合は、改行に特化した分割機能を提供してくれるsplitlinesメソッドを使用するのが便利です。splitlinesメソッドは、以下の例のように使用します。
sample_text = """\ Python Java C C++ C# Go """ # splitlinesにより改行文字で分割する print(sample_text.splitlines()) # 改行文字を含めたまま分割する場合は、引数にTrueを設定する print(sample_text.splitlines(True))
【実行結果】 ['Python', 'Java', 'C', 'C++', 'C#', 'Go'] ['Python\n', 'Java\n', 'C\n', 'C++\n', 'C#\n', 'Go\n']
上記のように各改行ごとに分割できていることが分かります。splitlinesメソッドは、改行文字はデフォルトで除去されます。もし、改行文字を結果に残したままにしたい場合には、splitlinesの引数にTrueを指定することで改行文字込みで分割ができます。
splitlinesの公式ドキュメントの記載はこちらを参照してください。
文字列を特定の区切り文字で2分割する方法
split, rsplitメソッドは、文字列中に含まれる区切り文字で文字列を分割しました。文字列を分割する際に、最初に見つかった区切り文字で文字列を2分割をしたい場合には、partition, rpartitionメソッドが使用できます。
前方から文字列を2分割する partition
前方から文字列を2分割する場合には、以下のようにpartitionメソッドを使用します。
sample_text = "samplesite.com/sample.html" # partitionで前方から2分割する print(sample_text.partition(".")) # 区切り文字が見つからない場合 print(sample_text.partition("#"))
【実行結果】 ('samplesite', '.', 'com/sample.html') ('samplesite.com/sample.html', '', '')
partitionメソッドは前方から区切り文字を探し、見つかった位置で文字列を2分割します。メソッドの返り値はタプル形式です。
上記のように「区切り文字の前の文字列」「区切り文字」「区切り文字の後の文字列」という3要素からなるタプルとなっていることが分かります。
対象の文字列に区切り文字が見つからなかった場合は、partitionでは最初の要素に元の文字列が設定され、残りの要素は空文字となります。
後方から文字列を2分割する rpartition
後方から文字列を2分割する場合には、以下のようにrpartitionメソッドを使用します。
sample_text = "samplesite.com/sample.html" # rpartitionで後方から2分割する print(sample_text.rpartition(".")) # 区切り文字が見つからない場合 print(sample_text.rpartition("#"))
【実行結果】 ('samplesite.com/sample', '.', 'html') ('', '', 'samplesite.com/sample.html')
rpartitionメソッドは後方から区切り文字を探し、見つかった位置で文字列を2分割します。メソッドの返り値はタプル形式です。
partitionと同様に「区切り文字の前の文字列」「区切り文字」「区切り文字の後の文字列」という3要素からなるタプルとなっていることが分かります。
対象の文字列に区切り文字が見つからなかった場合は、rpartitionでは3番目の要素に元の文字列が設定され、残りの要素は空文字となります。
まとめ
Pythonで文字列を特定の区切り文字で分割する方法について解説しました。
文字列を分割する方法としては以下のようなメソッドが使用できます。
- 特定の区切り文字で分割する:split, rsplit
- 改行文字で分割する:splitlines
- 特定の区切り文字で2分割する:partition, rpartition
目的に応じてうまく使い分けてもらえればと思います。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。