【问题标题】:Split the contents of a string拆分字符串的内容
【发布时间】:2020-12-03 16:07:18
【问题描述】:

我有以下字符串

s = "ΔG'° = (-19.9 +/- 0.4) kilojoule / mole"

我想生成一个像下面这样的字典

d = {"mean"= -19.9, "sd": 0.4, "units": "kilojoule / mole"}

如果字符串是-19.9 +/- 0.4,我可以使用s.split("+/-")。但是在给定的格式中,我有 根据每个分隔符拆分几次。

有没有简单的方法可以做到这一点?

【问题讨论】:

  • 你所有的字符串都是这种格式吗?因为这样你就可以构建一个正则表达式来解决每个部分。
  • @Thymen 是的,都是这种格式

标签: python-3.x regex string


【解决方案1】:

你可以使用

r'=[^\d-]*(?P<mean>-?\d*\.?\d+)\s*\+/-\s*(?P<sd>\d*\.?\d+)\W+(?P<units>.+)'

请参阅regex demo。详情:

  • = - = 符号
  • [^\d-]* - 除数字和 - 之外的零个或多个字符
  • (?P&lt;mean&gt;-?\d*\.?\d+) - 组“均值”:一个可选的 -,零个或多个数字,一个可选的 .,然后是一个或多个数字
  • \s*\+/-\s* - 用零个或多个空格括起来的 +/- 子字符串
  • (?P&lt;sd&gt;\d*\.?\d+) - 组“sd”:零个或多个数字,可选的.,然后是一个或多个数字
  • \W+ - 一个或多个非单词字符
  • (?P&lt;units&gt;.+) - 组“单位”:字符串的其余部分。

Python demo

import re
rx = r'=[^\d-]*(?P<mean>-?\d*\.?\d+)\s*\+/-\s*(?P<sd>\d*\.?\d+)\W+(?P<units>.+)'
text = r"ΔG'° = (-19.9 +/- 0.4) kilojoule / mole"
m = re.search(rx, text)
if m:
    print(m.groupdict())
# => {'mean': '-19.9', 'sd': '0.4', 'units': 'kilojoule / mole'}

【讨论】:

  • 该链接对我不起作用,但我使用 regex101 创建了一个替代链接 here
  • @Thymen 我仔细检查过,它现在一定可以工作了。
  • 是的,我在正则表达式演示链接之前回复了,但 Python demo 链接对我不起作用。
  • @Thymen 它对我有用...链接是ideone.com/r7oF1G
  • 显然使用 VPN 会阻止该站点,禁用它可以让我看到内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
相关资源
最近更新 更多