Jak mogę podzielić i przeanalizować łańcuch znaków w Pythonie?

Próbuję podzielić ten ciąg w Pythonie: 2.7.0_bf4fda703454

Chcę podzielić ten łańcuch na podkreślenie _, aby móc użyć wartości po lewej stronie.

Author: Eric Leschinski, 2011-04-22

3 answers

"2.7.0_bf4fda703454".split("_") podaje listę łańcuchów:

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

To dzieli łańcuch na Co podkreślenie. Jeśli chcesz, aby przestał po pierwszym podziale, użyj "2.7.0_bf4fda703454".split("_", 1).

Jeśli wiesz na pewno, że łańcuch zawiera podkreślenie, możesz nawet rozpakować LHS i RHS do oddzielnych zmiennych:

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

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

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

Alternatywą wskazaną przez @S. Lott jest użycie partition. Sposób użycia jest podobny do poprzedniego przykładu, z tą różnicą, że zwraca trzy komponenty zamiast dwóch. Dyrektor zaletą jest to, że ta metoda nie zawodzi, jeśli łańcuch znaków nie zawiera separatora. Ta metoda wymaga jednak Pythona 2.5.

 113
Author: NPE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-21 20:17:03

Python string parsing walkthrough

Podziel łańcuch znaków na spację, Pobierz listę, Pokaż jego typ, wydrukuj go:

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?']

Jeśli masz dwa ograniczniki obok siebie, przyjmowany jest pusty łańcuch:

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

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

Podziel napis na podkreślenie i złap 5. pozycję na liście:

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

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

Zwiń wiele spacji w jedną

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

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

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

Gdy nie przekazujesz żadnego parametru do metody split Pythona, dokumentacja states: "ciągi kolejnych białych znaków są traktowane jako pojedynczy separator, a wynik nie będzie zawierał pustych łańcuchów na początku lub końcu, jeśli łańcuch ma początkowe lub końcowe białe znaki".

Hold on your hats boys, parse on a regular expression:

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

Wyrażenie regularne "[a-M]+ " oznacza małe litery a poprzez m, które występują jeden lub więcej razy, są dopasowane jako ogranicznik. {[8] } jest biblioteką do zaimportowania.

Lub jeśli chcesz chomp przedmioty po kolei:

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
 61
Author: Eric Leschinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-23 23:59:18

Jeśli zawsze będzie to parzysty podział LHS/RHS, możesz również użyć metody partition, która jest wbudowana w ciągi. Zwraca krotkę 3 jako (LHS, separator, RHS) jeśli separator został znaleziony i (original_string, '', '') Jeśli separator nie był obecny:

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

>>> "shazam".partition("_")
('shazam', '', '')
 16
Author: bgporter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-21 20:09:39