如何提取固定单词与模式间的字符串?以指定键值对提取为例
固定关键词对应值的提取方案
一、针对目标字符串的具体实现
给定目标字符串:"Bar Z1050,c105 cpt 100580 prov 056875",可以用正则表达式精准匹配每个关键词对应的取值范围。以Python为例,代码实现如下:
import re target_str = "Bar Z1050,c105 cpt 100580 prov 056875" result = {} # 提取bar对应的值(匹配Bar到下一个关键词cpt之间的内容) bar_match = re.search(r'(?i)bar\s+(.*?)\s+cpt', target_str) if bar_match: result['bar'] = bar_match.group(1) # 提取cpt对应的值(匹配cpt到下一个关键词prov之间的内容) cpt_match = re.search(r'(?i)cpt\s+(.*?)\s+prov', target_str) if cpt_match: result['cpt'] = cpt_match.group(1) # 提取prov对应的值(匹配prov到字符串结尾的内容) prov_match = re.search(r'(?i)prov\s+(.*)$', target_str) if prov_match: result['prov'] = prov_match.group(1) print(result) # 输出: {'bar': 'Z1050,c105', 'cpt': '100580', 'prov': '056875'}
二、通用提取方法总结
这类固定单词与后续内容的提取,核心思路是定位关键词位置,捕获关键词到下一个边界(下一个关键词/字符串结尾)之间的内容,具体可按以下步骤操作:
- 明确所有需要匹配的关键词集合,比如本例的
bar、cpt、prov
- 明确所有需要匹配的关键词集合,比如本例的
- 针对每个关键词构建匹配规则:
- 若关键词后接其他关键词:用
(?i)关键词\s+(.*?)\s+下一个关键词,其中(?i)忽略大小写,\s+匹配任意空白字符,.*?非贪婪匹配中间内容 - 若关键词为最后一个:用
(?i)关键词\s+(.*)$,$匹配字符串结尾
- 利用编程语言的正则分组捕获功能提取内容;也可通过字符串分割、索引定位的方式实现(无需正则)
非正则的替代实现(Python)
如果不想用正则,也可以通过字符串分割实现:
target_str = "Bar Z1050,c105 cpt 100580 prov 056875" lower_str = target_str.lower() result = {} # 提取bar的值 bar_start = lower_str.find('bar') + 3 cpt_start = lower_str.find('cpt') result['bar'] = target_str[bar_start:cpt_start].strip() # 提取cpt的值 cpt_end = lower_str.find('prov') result['cpt'] = target_str[cpt_start+3:cpt_end].strip() # 提取prov的值 prov_start = lower_str.find('prov') + 4 result['prov'] = target_str[prov_start:].strip() print(result) # 输出同样符合预期
内容的提问来源于stack exchange,提问作者user3319471
相关产品推荐
相关产品推荐

