r - 限制环视范围
问题描述
我在 R 中使用正则表达式引擎,我想要求正则表达式环顾一个不超过 3-8 个单词的特定单词。我该怎么做?
如果您需要更多详细信息,我正在尝试从大量回声报告中提取特定类型的心脏功能障碍(收缩功能障碍)的程度(轻度/中度/重度)。每个心脏有2个心室,我要提取的是左心室(lv)而不是右心室(rv)的收缩功能障碍
所以是的:“扩大的 lv 腔室伴有某种程度的轻度至中度收缩功能障碍”,而不是:“扩大的 rv 腔室伴有某种程度的轻度至中度收缩功能障碍”
在 echo 报告中讨论了 rv 和 lv 功能障碍,所以我很自然地
想要使用环视来排除在某个地方有“rv”的情况,例如“轻度收缩功能障碍”周围有 3-8 个单词
我试着像这样向后看
(?<!rv(\\s+\\w+\\s+){3,8})
但我收到以下错误:
“Look-Behind 模式匹配必须有一个有界的最大长度”
PS:我正在使用 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)"
解决方案
您需要通过仅使用后向中的限制量词来确保后向模式具有“有界最大长度”,因为+
量词匹配一个或多个事件。虽然它限制了下限(1),但它不限制上限。
查看示例 R 演示:
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 个单词字符,这就是“有界”的含义,从下到上都有上限。这些数字是任意的,选择它们时请遵循常识和您的数据。普通文本中的单词之间不可能有超过 2 个空格(我在这里设置 100 只是作为一个极端示例)。一个单词模式允许 100 个字符就足够了。调整你认为合适的。
输出:
推荐阅读
- javascript - 将浮点字节转换为字符串
- r - 使用 dplyr::mutate() 获取选定列的滚动平均值
- php - 如何将证书添加到 PhpStorm?
- python - 如何使用熊猫数据框作为其他数据框的条件
- python - Pandas:从交叉表到计数表
- java - RSA 加密在 Java 中导致 IllegalBlockSizeException
- css - 通过单击并拖动来选择 div flex 框
- php - 如何在 macOS Catalina 上的 PHP 7.3 下安装 intl 扩展?
- react-native - 使用 Image.getSize 函数反应本机问题
- graphql - GraphQL Stitching - 为什么子模式中的字段会返回 null?