首页 > 解决方案 > 我的 R 正则表达式匹配正确吗?

问题描述

我一直在努力使用正则表达式,最近写了一个我认为可以正常工作的表达式,但我不确定。我对任何花时间查看下面我的代码的人的问题 - 从理论上讲,它是否在做我想要做的事情?

目的:我正在查看数据集中的每一列,以识别包含以“pharmacy -”开头的字符串,后跟 13 种药物类型中的任何一种,并以括号结尾并带有数字的行。这里有些例子:

pharmacy - oxycodone/acetaminophen (3)

pharmacy - fentanyl (2.83)

pharmacy - hydromorphone (6.8)

我写的代码如下。我相信它正在工作,但如果有任何正则表达式专家可以查看并确认它正在做我认为它应该做的事情,我将不胜感激:

viz$med_2 <- apply(viz, 1, function(x)as.integer(any(grep("^pharmacy+[ -]+(codeine|oxycodone|fentanyl|hydrocodone|hydromophone|mathadone|morphine sulfate|oxycodone|oxycontin|roxicodone|tramadol|hydrocodone/acetaminophen|oxycodone/acetaminophen)+[ -]+[(]+[0-9]+", x))))

标签: rregexexpression

解决方案


不是专家,但你的表情看起来很棒,我可能会稍微修改一下:

^pharmacy\s*-\s*(codeine|oxycodone|fentanyl|hydrocodone|hydromophone|mathadone|morphine sulfate|oxycodone|oxycontin|roxicodone|tramadol|hydrocodone\/acetaminophen|oxycodone\/acetaminophen)\s*\(\s*[0-9]+(\.[0-9]+)?\s*\)$

如果您有兴趣,在这个演示中解释了表达式。

确保 R 需要转义。

正则表达式电路

jex.im可视化正则表达式:

在此处输入图像描述


推荐阅读