如何用Python re模块匹配拆分ICD编码格式字符串为指定列表
正确正则匹配规则实现
你之前的写法问题出在使用了贪婪匹配,且没有明确匹配终止边界,导致会一直匹配到字符串末尾,无法自动在下一个编码开始前截断。
匹配逻辑说明
结合你给出的编码规则和分隔规则,我们使用「非贪婪匹配+正向预查」实现边界识别:
- 先精准匹配编码格式:大写字母开头,包含1个小数点的数字,末尾可选小写字母
- 非贪婪匹配编码后的描述内容
- 通过正向预查判断终止位置:要么遇到下一个编码前的
,分隔符,要么到字符串末尾
完整实现代码
import re string = 'M43.16: Spondylolisthesis, lumbar region, ' \ 'M51.27: Other intervertebral disc displacement, lumbosacral region, ' \ 'M54.17: Radiculopathy, lumbosacral region' result = re.findall(r'[A-Z]\d+\.\d+[a-z]?:.*?(?=, [A-Z]\d+\.\d+|$)', string) print(result)
输出结果
['M43.16: Spondylolisthesis, lumbar region', 'M51.27: Other intervertebral disc displacement, lumbosacral region', 'M54.17: Radiculopathy, lumbosacral region']
正则各部分解释
[A-Z]:匹配编码开头的大写字母\d+\.\d+:匹配编码中带1个小数点的数字部分[a-z]?:匹配编码末尾可选的小写字母::匹配编码后的固定冒号分隔符.*?:非贪婪匹配后续描述内容,避免跨条目匹配(?=, [A-Z]\d+\.\d+|$):正向零宽预查,匹配到下一个编码前的,分隔符或者字符串末尾时停止,不会消耗分隔符内容
可选调整:如果你的编码规则允许开头有多个大写字母(比如
AB12.34c格式),可将正则开头的[A-Z]调整为[A-Z]+即可适配。
内容的提问来源于stack exchange,提问作者Dr.Prime
相关产品推荐
相关产品推荐

