字符串中缺少子字符串时的最佳实践
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'}
现在根据需要的任何进一步规则进一步分析结果。
我正在从 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'}
现在根据需要的任何进一步规则进一步分析结果。