限制环视范围
Limiting the scope of lookaround
我在 R 中使用正则表达式引擎,我想让正则表达式查找不超过 3-8 个单词的特定单词。我该怎么做?
如果您需要更多详细信息,我正在尝试从大量回声报告中提取特定类型心功能障碍(收缩功能障碍)的程度 (Mild/Moderate/Severe)。每颗心脏有2个心室,我要提取的是左心室(lv)的收缩功能障碍,而不是右心室(rv)
所以是的:“左心室扩大,有一定程度的轻度到中度收缩功能障碍”
并且没有:“扩大的 rv 室具有一定程度的轻度至中度收缩功能障碍”
在 echo 报告中讨论了 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)"
您需要通过仅在回顾中使用限制量词来确保回顾模式具有“有界最大长度”,因为 +
量词匹配 一个或多个 事件。虽然它限制下限(为 1),但不限制上限。
看到一个sample R demo:
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)
参见what this regex means here。 \s{1,100}
匹配 1 到 100 个空格,\w{1,100}
匹配 1 到 100 个单词字符,这就是“有界”的意思,上下限。数字是任意的,按照常识和选择你的数据即可。普通文本中单词之间的空格不太可能超过 2 个(我在这里设置 100 只是作为一个极端的例子)。一个单词模式允许 100 个字符就足够了。按您认为合适的方式进行调整。
输出:
查看 R stringr
正则表达式函数中使用的 ICU 正则表达式风格中的 YT demo of this constrained-width lookbehind 功能。
我在 R 中使用正则表达式引擎,我想让正则表达式查找不超过 3-8 个单词的特定单词。我该怎么做?
如果您需要更多详细信息,我正在尝试从大量回声报告中提取特定类型心功能障碍(收缩功能障碍)的程度 (Mild/Moderate/Severe)。每颗心脏有2个心室,我要提取的是左心室(lv)的收缩功能障碍,而不是右心室(rv)
所以是的:“左心室扩大,有一定程度的轻度到中度收缩功能障碍” 并且没有:“扩大的 rv 室具有一定程度的轻度至中度收缩功能障碍”
在 echo 报告中讨论了 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)"
您需要通过仅在回顾中使用限制量词来确保回顾模式具有“有界最大长度”,因为 +
量词匹配 一个或多个 事件。虽然它限制下限(为 1),但不限制上限。
看到一个sample R demo:
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)
参见what this regex means here。 \s{1,100}
匹配 1 到 100 个空格,\w{1,100}
匹配 1 到 100 个单词字符,这就是“有界”的意思,上下限。数字是任意的,按照常识和选择你的数据即可。普通文本中单词之间的空格不太可能超过 2 个(我在这里设置 100 只是作为一个极端的例子)。一个单词模式允许 100 个字符就足够了。按您认为合适的方式进行调整。
输出:
查看 R stringr
正则表达式函数中使用的 ICU 正则表达式风格中的 YT demo of this constrained-width lookbehind 功能。