web-dev-qa-db-ja.com

Pythonで文字列を分割して解析するにはどうすればいいですか?

私はPythonでこの文字列を分割しようとしています:2.7.0_bf4fda703454

左側の値を使用できるように、アンダースコア_でその文字列を分割したいと思います。

101
kamal

"2.7.0_bf4fda703454".split("_")は文字列のリストを返します:

In [1]: "2.7.0_bf4fda703454".split("_")
Out[1]: ['2.7.0', 'bf4fda703454']

これは、文字列をアンダースコアごとに分割します。最初の分割後に停止したい場合は、"2.7.0_bf4fda703454".split("_", 1)を使用してください。

文字列にアンダースコアが含まれていることがわかっている場合は、LHSとRHSを別々の変数に展開することもできます。

In [8]: lhs, rhs = "2.7.0_bf4fda703454".split("_", 1)

In [9]: lhs
Out[9]: '2.7.0'

In [10]: rhs
Out[10]: 'bf4fda703454'

別の方法は partition() を使うことです。使い方は最後の例と似ていますが、2つではなく3つのコンポーネントを返す点が異なります。主な利点は、文字列に区切り文字が含まれていなくてもこのメソッドが失敗しないことです。

130
NPE

Python文字列解析のチュートリアル

スペースで文字列を分割し、リストを取得し、そのタイプを表示し、それをプリントアウトします。

el@apollo:~/foo$ python
>>> mystring = "What does the fox say?"

>>> mylist = mystring.split(" ")

>>> print type(mylist)
<type 'list'>

>>> print mylist
['What', 'does', 'the', 'fox', 'say?']

2つの区切り文字が隣接している場合は、空の文字列が想定されます。

el@apollo:~/foo$ python
>>> mystring = "its  so   fluffy   im gonna    DIE!!!"

>>> print mystring.split(" ")
['its', '', 'so', '', '', 'fluffy', '', '', 'im', 'gonna', '', '', '', 'DIE!!!']

アンダースコアで文字列を分割し、リストの5番目の項目を取得します。

el@apollo:~/foo$ python
>>> mystring = "Time_to_fire_up_Kowalski's_Nuclear_reactor."

>>> mystring.split("_")[4]
"Kowalski's"

複数のスペースをひとつにまとめます

el@apollo:~/foo$ python
>>> mystring = 'collapse    these       spaces'

>>> mycollapsedstring = ' '.join(mystring.split())

>>> print mycollapsedstring.split(' ')
['collapse', 'these', 'spaces']

Pythonのsplitメソッドにパラメータを渡さないと、 ドキュメントによると : "連続した空白の連続は単一のセパレータと見なされ、文字列の先頭または末尾に空の文字列が含まれない場合先頭または末尾の空白 "#:。

男の子を抱きしめて、正規表現でパースします。

el@apollo:~/foo$ python
>>> mystring = 'zzzzzzabczzzzzzdefzzzzzzzzzghizzzzzzzzzzzz'
>>> import re
>>> mylist = re.split("[a-m]+", mystring)
>>> print mylist
['zzzzzz', 'zzzzzz', 'zzzzzzzzz', 'zzzzzzzzzzzz']

正規表現 "[a-m] +"は、1回以上出現する小文字のaからmを区切り文字として照合することを意味します。 reはインポートするライブラリです。

またはアイテムを一度に1つずつ切り取りたい場合は、

el@apollo:~/foo$ python
>>> mystring = "theres coffee in that nebula"

>>> mytuple = mystring.partition(" ")

>>> print type(mytuple)
<type 'Tuple'>

>>> print mytuple
('theres', ' ', 'coffee in that nebula')

>>> print mytuple[0]
theres

>>> print mytuple[2]
coffee in that nebula
71
Eric Leschinski

常にLHS/RHSが均等に分割される場合は、文字列に組み込まれているpartitionメソッドを使用することもできます。セパレータが見つかった場合は(LHS, separator, RHS)として3タプルを返し、セパレータがない場合は(original_string, '', '')を返します。

>>> "2.7.0_bf4fda703454".partition('_')
('2.7.0', '_', 'bf4fda703454')

>>> "shazam".partition("_")
('shazam', '', '')
17
bgporter