首页 > 解决方案 > Python提取以索引开头的字符串直到字符

问题描述

假设我有一个变化不大的传入字符串:

  1. " 1 |r|=1.2e10 |v|=2.4e10"
  2. " 12 |r|=-2.3e10 |v|=3.5e-04"
  3. "134 |r|= 3.2e10 |v|=4.3e05"

我需要提取数字(即 1.2e10、3.5e-04 等)...所以我想从 '|r|' 的末尾开始 并将所有字符抓取到它之后的 ' ' (空格)。'|v|' 相同

我一直在寻找这样的东西:从一个字符串中提取一个子字符串,该字符串从一个索引开始,到一个特定的字符结束......但还没有找到任何远程接近的东西。想法?

注意:添加了新场景,这是导致很多令人头疼的场景......

标签: pythonstringsubstringextract

解决方案


为了保持优雅和通用,让我们使用split

  1. 首先,我们用 ' ' 分割成标记
  2. 然后我们找到它是否有等号并解析key-value
import re
sabich = "134 |r|     = 3.2e10 |v|=4.3e05"

parts = sabich.split(' |')
values = {}
for p in parts:
    if '=' in p:
        k, v = p.split('=')
        values[k.replace('|', '').strip()] = v.strip(' ')

# {'r': '3.2e10', 'v': '4.3e05'}
print(values)

这可以转换为单线:

import re
sabich = "134 |r|     = 3.2e10 |v|=4.3e05"

values = {t[0].replace('|', '').strip() :  t[1].strip(' ') for t in [tuple(p.split('=')) for p in sabich.split(' |') if '=' in p]}

# {'|r|': '1.2e10', '|v|': '2.4e10'}
print(values)

推荐阅读