Как я могу разбить и разобрать строку в Python? - PullRequest
101 голосов
/ 22 апреля 2011

Я пытаюсь разбить эту строку в Python: 2.7.0_bf4fda703454

Я хочу разбить эту строку на подчеркивание _, чтобы использовать значение слева.

Ответы [ 3 ]

130 голосов
/ 22 апреля 2011

"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(). Использование аналогично последнему примеру, за исключением того, что он возвращает три компонента вместо двух. Основное преимущество заключается в том, что этот метод не завершается ошибкой, если строка не содержит разделитель.

71 голосов
/ 08 января 2014

Прохождение разбора строки 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?']

Еслиу вас есть два разделителя рядом друг с другом, предполагается пустая строка:

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, документация заявляет : "выполнение последовательных пробеловрассматриваются как один разделитель, и результат не будет содержать пустых строк в начале или конце, если строка имеет начальный или конечный пробел ".

Держитесь за ваши шляпы, парни, анализируйте по регулярному выражению:

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

Регулярное выражение «[am] +» означает, что строчные буквы a - m, встречающиеся один или несколько раз, сопоставляются как разделитель.re - это библиотека для импорта.

Или, если вы хотите разбивать элементы по одному:

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
17 голосов
/ 22 апреля 2011

Если это всегда будет четное разделение LHS / RHS, вы также можете использовать метод partition, встроенный в строки.Он возвращает 3-кортеж как (LHS, separator, RHS), если разделитель найден, и (original_string, '', ''), если разделитель отсутствует:

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

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