How can I split and parse a string in Python?

匿名 (未验证) 提交于 2019-12-03 02:08:02

问题:

I am trying to split this string in python: 2.7.0_bf4fda703454

I want to split that string on the underscore _ so that I can use the value on the left side.

回答1:

"2.7.0_bf4fda703454".split("_") gives a list of strings:

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

This splits the string at every underscore. If you want it to stop after the first split, use "2.7.0_bf4fda703454".split("_", 1).

If you know for a fact that the string contains an underscore, you can even unpack the LHS and RHS into separate variables:

In [8]: lhs, rhs = "2.7.0_bf4fda703454".split("_", 1)  In [9]: lhs Out[9]: '2.7.0'  In [10]: rhs Out[10]: 'bf4fda703454' 

An alternative pointed out by @S.Lott is to use partition. The usage is similar to the last example, except that it returns three components instead of two. The principal advantage is that this method doesn't fail if the string doesn't contain the separator. This method, however, requires Python 2.5.



回答2:

Python string parsing walkthrough

Split a string on space, get a list, show its type, print it out:

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

If you have two delimiters next to each other, empty string is assumed:

el@apollo:~/foo$ python >>> mystring = "its  so   fluffy   im gonna    DIE!!!"  >>> print mystring.split(" ") ['its', '', 'so', '', '', 'fluffy', '', '', 'im', 'gonna', '', '', '', 'DIE!!!'] 

Split a string on underscore and grab the 5th item in the list:

el@apollo:~/foo$ python >>> mystring = "Time_to_fire_up_Kowalski's_Nuclear_reactor."  >>> mystring.split("_")[4] "Kowalski's" 

Collapse multiple spaces into one

el@apollo:~/foo$ python >>> mystring = 'collapse    these       spaces'  >>> mycollapsedstring = ' '.join(mystring.split())  >>> print mycollapsedstring.split(' ') ['collapse', 'these', 'spaces'] 

When you pass no parameter to Python's split method, the documentation states: "runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace".

Hold onto 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'] 

The regular expression "[a-m]+" means the lowercase letters a through m that occur one or more times are matched as a delimiter. re is a library to be imported.

Or if you want to chomp the items one at a time:

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 


回答3:

If it's always going to be an even LHS/RHS split, you can also use the partition method that's built into strings. It returns a 3-tuple as (LHS, separator, RHS) if the separator is found, and (original_string, '', '') if the separator wasn't present:

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!