Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使正则表达式忽略特定组后面的模式_Python_Regex - Fatal编程技术网

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

Python 如何使正则表达式忽略特定组后面的模式,python,regex,Python,Regex,我确实在2个月前发布了以下正则表达式模式来捕获ICD9代码。预计只捕获ICD9代码(例如:134.57或V23.54或E33.62),忽略患者的体重134.57 lb或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或任何其他停止词的模式 我可以写一些基本的正则表达式

我确实在2个月前发布了以下正则表达式模式来捕获ICD9代码。预计只捕获ICD9代码(例如:134.57或V23.54或E33.62),忽略患者的体重134.57 lb或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或任何其他停止词的模式

我可以写一些基本的正则表达式,但这对我小小的大脑来说太复杂了,需要帮助

(?:(?:V\d{1,2}\.\d{1,2})|(?:\d{1,3}\.\d{1,2})|(?:E\d{1,2}\.\d+))(?!\d|(?:\s*(?:kg|lb|mg)s?))
试试这个。看演示

修改了前瞻,将\d包含在其中,以避免部分匹配

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})|(?:E\d{1,2}.\d+)(?!\d |(?:\s*(?:kg | lb | mg)s?) 代码=findall(icdRegex,hit)


“命中”将是临床记录。

您可以发布示例输入数据和您想要捕获的内容吗?什么语言?是Python。样本数据看起来像//2型糖尿病(250.00)(E11.9)高血压(401.9)(I10)高脂血症(272.4)(E78.5)骨质减少(733.90)(M85.80)维生素D缺乏(268.9)(E55.9)体重272.4 lb睾丸存储250.0//每个记录都有
/
分隔符吗?ICD9代码是否总是在括号中?您越具体,解决方案就越健壮。不,分隔符仅用于标记post中样本数据的边界。是的,ICD9代码将始终在括号中。您更改了什么?为什么?我想我在问这个问题时做得不好。我的正则表达式捕获ICD9代码的第一部分工作得非常好,经过了很好的测试。问题是,它还捕获任何重量,如134.56磅作为代码,因为它匹配的模式@vks:这个表达式捕获的不仅仅是ICD9模式(例如:2.5、44.52,这不是我们想要的)。我需要帮助来修复第二部分,并使其忽略后跟停止词的值。希望我说的有道理。它仍然漏掉了前134.57。ICD9代码可以具有与某人体重相同的值。我们在正则表达式上下注,以确定第一个134.57是代码,第二个134.57是权重,因为后面跟着lb.@vks:它在正则表达式测试程序中工作,但在我的代码中不工作。python的正则表达式不同吗?@vks:不,什么。。。你是对的。您的正则表达式模式工作得非常好。它对我不起作用的原因是我把整个临床文档分成了几行。当我改变我的流程,在整个文档上运行正则表达式时,它的效果非常好。吨。