Как я могу разбить и проанализировать строку в Python?

107

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

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

Камал
источник
Ознакомьтесь с partitionметодом строк, а затем обновите свой вопрос.
S.Lott

Ответы:

141

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

NPE
источник
81

Пошаговое руководство по синтаксическому анализу строки 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']

Регулярное выражение «[Я] +» означает , что строчные буквы 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
Эрик Лещинский
источник
18

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

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

>>> "shazam".partition("_")
('shazam', '', '')
bgporter
источник