我在R中使用regex引擎,我想要求regex查找一个不超过3-8个单词的特定单词。我该怎么做呢?
如果你需要更多的细节,我试图从大量的回声报告中提取特定类型的心脏功能障碍(收缩功能障碍)的程度(轻度/中度/重度)。每个心脏都有两个心室,我想要提取的是左心室收缩功能障碍,而不是右心室(Rv)。
因此,是的:“扩大的左室室并有一定程度的轻度至中度收缩功能障碍”和“增大的rv室室并有某种程度的轻至中度收缩功能障碍”。
在回声报告中,rv和lv功能障碍都会被讨论,所以我自然地
如果周围有一个3-8个单词的"rv“,例如”轻度收缩功能障碍“,就应该使用查找器来排除这种情况。
我试过像这样往后看
(?<!rv(\\s+\\w+\\s+){3,8})但我得到了以下错误:
“后视模式匹配必须有有界的最大长度”
P.S:我用的是stringr
我使用的代码如下:
lv_systolic_dysfunction <- "(?i)(?<!rv(\\s+\\w+\\s+){3,8}))\\b(?!lv\\b)((?:\\w+\\s+to\\s+)?\\w+)\\b(?=(?:\\s+lv)?\\s+s[yi]stolic\\s+d[yi]sfunction)"发布于 2021-09-10 19:18:03
您需要确保查找模式具有“有界最大长度”,方法是在+量词匹配一个或多个事件时,只使用查找背后的限制量词。虽然它限制下界(在1),但它不限制上界。
library(dplyr)
library(stringr)
df <- tibble(test = c("normal rv with mild to moderate systolic dysfunction"))
lv_systolic_dysfunction <- "(?<!\\brv(?:\\s{1,100}\\w{1,100}){3,5}\\s{1,100})\\bmild to moderate\\b"
str_view_all(df$test, lv_systolic_dysfunction)见这个正则表达式在这里意味着什么。\s{1,100}匹配1到100个空白空间,\w{1,100}匹配1到100个单词字符,这就是“有界”的意思,在下面和上面加上上限。数字是任意的,在选择它们时,只需遵循常识和数据即可。在普通文本中,单词之间不可能有超过两个空格(我在这里设置100作为一个极端的例子)。对于一个字模式来说,允许100个字符就足够了。调整你认为合适的。
输出:

请参阅用于R stringr regex函数的ICU regex风味中的stringr特性。
https://stackoverflow.com/questions/69136707
复制相似问题