如何使用正则表达式从指定格式文本中提取字母数字ID与对应描述
正则提取字母数字ID与对应描述实现方案
原有代码问题
原有正则r"\w+\.\d+"存在明显逻辑缺陷,无法满足匹配需求:
- 仅能匹配「字母数字段+点+纯数字段」的固定结构,无法覆盖ID中包含字母数字混合段(如
1A)、ID尾段带字母(如A8、尾缀A)的场景 - 遇到多段点分隔的ID会提前截断,例如
AA.1.2.2A仅能匹配到前三个字符AA.1,无法获取完整ID - 代码存在语法问题:使用关键字
in作为循环变量、使用内置函数名input作为变量名,运行会直接报错
核心匹配逻辑
由于ID与描述之间无显式分隔符,通过文本特征识别分界点:ID为行首连续的字母、数字、点组合,分界位置为描述第一个单词的起始处——即第一个出现「大写首字母+小写字母」的英文单词起始位置,以此拆分ID和描述准确率最高。
正确实现代码
import re # 正则规则:组1捕获完整ID,组2捕获完整描述 id_extract_pattern = re.compile(r'^([a-zA-Z0-9.]+?)([A-Z][a-z].*)$') control_ids = {} # 此处替换为实际输入的文本行列表 input_lines = [ "TTTT.1.A8This is important", "AA.1.2.2ANothing is sometimes important", "AAC.1A.2Everything sometimes is not important" ] for line in input_lines: line = line.strip() match_result = id_extract_pattern.match(line) if match_result: req_id = match_result.group(1).strip() req_desc = match_result.group(2).strip() control_ids[req_id] = req_desc # 对齐打印结果,与预期输出格式一致 print(f"{'ID':<10} description") for req_id, desc in control_ids.items(): print(f"{req_id:<10} {desc}")
运行结果
ID description TTTT.1.A8 This is important AA.1.2.2A Nothing is sometimes important AAC.1A.2 Everything sometimes is not important
内容的提问来源于stack exchange,提问作者sagargahalod
相关产品推荐
相关产品推荐

