如何在Python中分割和解析字符串?
我正在尝试在Python中分割这个字符串:2.7.0_bf4fda703454
我想在下划线_
的地方把这个字符串分开,这样我就可以使用左边的值。
3 个回答
22
如果你总是想把字符串分成左右两部分,而且这两部分的长度是相等的,那么你可以使用字符串自带的 partition
方法。这个方法会返回一个三元组,格式是 (左边部分, 分隔符, 右边部分)
,如果找到了分隔符;如果没有找到分隔符,它会返回 (原始字符串, '', '')
。
>>> "2.7.0_bf4fda703454".partition('_')
('2.7.0', '_', 'bf4fda703454')
>>> "shazam".partition("_")
('shazam', '', '')
103
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的split方法时,文档中提到:“连续的空白字符会被视为一个分隔符,如果字符串的开头或结尾有空白,结果中不会包含空字符串。”
准备好了吗,伙计们,使用正则表达式解析:
el@apollo:~/foo$ python
>>> mystring = 'zzzzzzabczzzzzzdefzzzzzzzzzghizzzzzzzzzzzz'
>>> import re
>>> mylist = re.split("[a-m]+", mystring)
>>> print mylist
['zzzzzz', 'zzzzzz', 'zzzzzzzzz', 'zzzzzzzzzzzz']
正则表达式"[a-m]+"的意思是匹配小写字母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
163
"2.7.0_bf4fda703454".split("_")
这个代码会把字符串分割成一个字符串列表:
In [1]: "2.7.0_bf4fda703454".split("_")
Out[1]: ['2.7.0', 'bf4fda703454']
它会在每一个下划线的位置进行分割。如果你只想在第一个下划线处分割,可以用 "2.7.0_bf4fda703454".split("_", 1)
。
如果你确定这个字符串里有下划线,你甚至可以把分割后的左右两部分分别放到不同的变量里:
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()
。用法和上一个例子类似,不过它会返回三个部分,而不是两个。这个方法的主要优点是,如果字符串里没有分隔符,它不会出错。