我如何分割和parsingPython中的string?

我想在Python中分割这个string: 2.7.0_bf4fda703454

我想在下划线_上分割该string,以便我可以使用左侧的值。

"2.7.0_bf4fda703454".split("_")给出了一个string列表:

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

这将在每个下划线处分割string。 如果您希望在第一次拆分后停止,请使用"2.7.0_bf4fda703454".split("_", 1)

如果您知道string包含下划线,您甚至可以将LHS和RHS解压缩为单独的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' 

@ S.Lott指出的另一种方法是使用partition 。 用法与上一个例子类似,只不过它返回三个组件而不是两个。 主要优点是,如果string不包含分隔符,则此方法不会失败。 但是,这种方法需要Python 2.5。

Pythonstringparsing演练

在空间分割一个string,得到一个列表,显示它的types,打印出来:

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

如果您有两个相邻的分隔符,则假定为空string:

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

在下划线上分割一个string并获取列表中的第五个项目:

 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方法时, 文档指出 :“连续空白的运行被认为是一个单独的分隔符,并且如果string具有前导空白或尾随空格,结果将在开始或结束时不包含空string”。

抓住你的帽子男孩,parsing一个正则expression式:

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

正则expression式“[am] +”表示一个或多个出现一次或多次的小写字母am作为分隔符。 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 

如果它始终是一个LHS / RHS拆分,也可以使用内置于string中的partition方法。 如果find(LHS, separator, RHS)则返回3元组(LHS, separator, RHS)如果分隔符不存在,则返回(original_string, '', '')

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