如何在 Python 中拆分和解析字符串?

Posted

技术标签:

【中文标题】如何在 Python 中拆分和解析字符串?【英文标题】:How can I split and parse a string in Python? 【发布时间】:2011-08-10 14:08:22 【问题描述】:

我正在尝试在 python 中拆分此字符串:2.7.0_bf4fda703454

我想在下划线_ 上拆分该字符串,以便我可以使用左侧的值。

【问题讨论】:

阅读partition 字符串方法,然后更新您的问题。 【参考方案1】:

"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()。用法与上一个示例类似,不同之处在于它返回三个组件而不是两个。主要优点是如果字符串不包含分隔符,此方法不会失败。

【讨论】:

【参考方案2】:

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 方法传递任何参数时,the documentation states: "连续的空格被视为单个分隔符,如果字符串有前导或尾随空格,结果将在开头或结尾不包含空字符串”。

抓紧你的帽子男孩,解析正则表达式:

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

正则表达式“[a-m]+”表示匹配出现一次或多次的小写字母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

【讨论】:

回答您的问题:Ring-ding-ding-ding-dingeringeding Gering-ding-ding-ding-dingeringeding Gering-ding-ding-ding-dingeringeding。请不要恨我。【参考方案3】:

如果总是将 LHS/RHS 拆分为偶数,您还可以使用字符串中内置的 partition 方法。如果找到分隔符,则返回一个三元组(LHS, separator, RHS),如果没有分隔符,则返回(original_string, '', '')

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

>>> "shazam".partition("_")
('shazam', '', '')

【讨论】:

以上是关于如何在 Python 中拆分和解析字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 re.split 在 python 中拆分两列从 CSV 中查找字符串值

在 Python 中,如何将字符串拆分为多个整数?

Python - 如何在拆分字符串时忽略双引号中的空格? [复制]

如何拆分/解析 JSON 数据并将其保存到 SQL 服务器中?

如何在 Python 中加速字符串拆分

如何在Python中将具有名称(1个或多个单词)和数字的单行输入字符串拆分为[“名称”,“数字”]?