如何使正则表达式忽略特定组后面的模式

时间:2015-01-28 19:04:00

标签: python regex

我在2个月后发布this question并获得以下REGEX模式以捕获ICD9代码。预计仅捕获ICD9代码(例如:134.57或V23.54或E33.62)并忽略患者体重134.57磅或实验室结果如127.20 mg / dL。

icdRegex = recomp('(V\d{2}\.\d{1,2}|\d{3}\.\d{1,2}|E\d{3}\.\d)(?!\s*(?:kg|lb|mg)s?)')

现在出现了例外情况。正则表达式的第二部分不会忽略kg,lb,mg或任何其他停用词之后的模式。

我可以写一些基本的正则表达式,但这对我的小脑有点太复杂,需要帮助。

1 个答案:

答案 0 :(得分:2)

(?:(?:V\d{1,2}\.\d{1,2})|(?:\d{1,3}\.\d{1,2})|(?:E\d{1,2}\.\d+))(?!\d|(?:\s*(?:kg|lb|mg)s?))

试试这个。看看演示。

https://regex101.com/r/pM9yO9/12

modified the lookahead to include \d in it so that partial matches are avoided

x="""134.57 or V23.54 or E33.62 134.57 lb or a lab result like 127.20 mg/dL"""
print re.findall(r"(?:(?:V\d{1,2}\.\d{1,2})|(?:\d{3}\.\d{1,2})|(?:E\d{1,2}\.\d+))(?!\d|(?:\s*(?:kg|lb|mg)s?))",x)

输出:['134.57', 'V23.54', 'E33.62']

针对数据测试最终版本。

icdRegex = recomp(“(?:( ?: V \ d {1,2}。\ d {1,2})|(?:\ d {3}。\ d {1,2})| (量:我\ d {1,2} \ d +。))(\ d |(?:!?\ S *(?:千克|磅|毫克)S))“) codes = findall(icdRegex,hit)

其中“命中”将是临床记录。