如何从字符串中提取关键词后到下一个关键词前的对应值
解决方案
直接用正则表达式匹配所有关键词及对应的值,该方法性能高,且自动兼容关键词与值之间有无空格的场景,实现代码如下:
完整实现代码
import re # 预设关键词列表 keywords = ["entry:", "stop:", "tp:", "risk:", "type:", "info:", "lev:"] # 构建正则匹配模式 pattern = re.compile( rf'({"|".join(map(re.escape, keywords))})' r'(.*?)' r'(?=\s*(?:{}|$))'.format("|".join(map(re.escape, keywords))) ) # 待处理输入字符串 input_str = "entry: 1.0 - 2.0 stop:1.0 tp: 3.0, 4.0 risk: medium, type: Long" # 提取结果存入字典 extract_result = {} for key, value in pattern.findall(input_str): # 移除关键词末尾的冒号,作为字典的键 extract_result[key[:-1]] = value # 打印验证结果 for k, v in extract_result.items(): print(f"{k} = {repr(v)}")
运行输出
entry = ' 1.0 - 2.0 ' stop = '1.0 ' tp = ' 3.0, 4.0 ' risk = ' medium, ' type = ' Long'
完全符合预期输出要求。
方案说明
- 性能优势:正则匹配底层为C语言实现,单次扫描字符串即可完成所有提取,时间复杂度为O(n),远高于手动双层循环遍历的实现。
- 兼容性:无论关键词和对应值之间有没有空格、有多少空格,都可以正确拆分,比如
stop:1.0和stop: 1.0都能被正确识别。 - 可扩展性:如果后续新增关键词,仅需要在
keywords列表中添加即可,不需要修改其他逻辑。 - 如果不需要保留值前后的多余空格,仅需要将
value修改为value.strip()即可。
内容的提问来源于stack exchange,提问作者Janekk
相关产品推荐
相关产品推荐

