我有很多字符串,我希望提取每个字符串的某个部分。每个字符串都包含一个子字符串,如下所示:
my_token:[
"key_of_interest"
],
这是每个字符串中唯一标有my_token
的部分。我正在考虑获取'my_token:[“'的结束索引位置,然后获取'”的起始索引位置,“并获取这两个索引位置之间的所有文本。
有更好或更有效的方法吗?我会做这个长度为~10,000的字符串和大小为100,000的字符串。
编辑:该文件是.ion文件。根据我的理解,它可以被视为一个平面文件 - 因为它是基于文本的,用于描述元数据。
答案 0 :(得分:1)
当您澄清时,基本要求会显示出来:
我正在考虑获得'的结束指数位置。 my_token:[" '然后获得'的开始索引位置"],'并获得这两个索引位置之间的所有文本。
听起来你正试图避免使用正确的方法:使用解析器来处理字符串中的任何语言。
没有充分的理由直接在字符串基元之上构建解析,除非您有兴趣编写yet another parsing framework。
因此,请使用由您处理过问题的人员编写的库。
json
module;同上,如果它是Python标准库中已有解析器的其他语言。所以要做出一个好的选择,你需要知道什么是数据格式(这不是“文件名是什么”的答案;相反,你需要知道什么是数据格式这些文件的内容)。然后,您将能够搜索知道该数据格式的解析器库。
答案 1 :(得分:1)
如何以最简单最简单的方式完成这项工作"?
这确实是你正在做的事情。因此,任何进一步的改进只能来自每个步骤的优化。可能的方式包括:
str.index
并且实现可能已经很简单了答案 2 :(得分:0)
好吧,正如已经提到的 - 解析器似乎是最好的选择。
但是在没有所有额外建议的情况下回答你的问题......如果你只是看速度,解析器并不是最好的方法。更快的方法是你已经有一个这样的字符串就是使用正则表达式。
matches = re.match(r"my_token:\[\s*"(.*)"\s*\]\.",str)
key_of_interest = matches.groups()[0]
还有其他问题出现。例如,如果你的密钥里面有"
怎么办? strinified JSON将自动在那里使用转义字符,这也将由正则表达式捕获。因此,这有点太复杂了。
JSON本身不是正则表达式可解析的(is-json-a-regular-language)。因此,使用风险自负。但是,通过适当的限制和假设,regex将比json解析器更快。