字符串中缺少子字符串时的最佳实践

Best practice when substring is missing from string

我正在从 API 中提取数据,其中一个字段是一个字符串,我想从中提取多个子字符串(最好是 7 个)。为了获取这些子字符串,我使用了 index() 方法。

string = r"""[Summary]
Reason: Not enough information
Improvements_Done: None
Improvements_Planned: Documentation
References_Improvements_Done: None
References_Improvements_Done: None
References_Improvements_Planned: www.link1.com
References_Improvements_Planned: www.link2.com
 *** DEFAULT.....""".replace("\n", "\r\n")

Ex: imp_done_start = string.index('Improvements Done: ') + len('Improvements Done: ')
    imp_done_end = string.index('Improvements_Planned')
    imp_done = string[imp_done_start:imp_done_end]

在某些情况下,一个或多个子字符串(原因、Improvements_Done、Improvements_Planned 等)可能会从字符串中丢失。 例如,如果缺少“Improvements_Planned”,那么我无法获得 imp_done.

的值

处理此类情况的最佳做法是什么?

最佳做法在很大程度上取决于格式。但是,在大多数情况下,您可以采用 灵活的 方法并转换为更容易 parse/analyze 的中间表示:

import re

def parse(s: str) -> dict[str, str]:
    d = {}
    lines = s.splitlines()

    for line in lines[1:-1]:
        pattern = r"^(.*)?: (.*)$"
        m = re.match(pattern, line)
        if m is None:
            continue
        d[m.group(1)] = m.group(2)

    return d

用法:

>>> parse(string)
{'Improvements_Done': 'None',
 'Improvements_Planned': 'Documentation',
 'Reason': 'Not enough information',
 'References_Improvements_Done': 'None',
 'References_Improvements_Planned': 'www.link2.com'}

现在根据需要的任何进一步规则进一步分析结果。