正则表达式在选择中包括先行字符串
Regex includes Lookahead strings in selection
我试图从大量回声报告中提取特定类型心脏功能障碍(舒张功能障碍)的程度(Mild
/Moderate
/Severe
)。
Here is the link to the sample excel file with 2 of those echo reports.
这些行通常这样表示:“轻度左室舒张功能障碍”或“轻度舒张功能障碍”。在这里,“温和”是我要提取的。
我写了以下模式:
pattern <- regex("(\b\w+\b)(?= (lv )?(d(i|y)astolic|distolic) d(y|i)sfunction)",
ignore_case = FALSE)
现在,让我们看看结果(记住我想要“温和”部分而不是“LV”部分):
str_view_all(df$echo, pattern)
正如您在“轻度舒张功能障碍”这样的字符串中看到的,该模式正确地选择了“轻度”,但是当谈到“轻度 LV 舒张功能障碍”时,模式选择了“LV”,即使我已经带来了 lv
在一个积极的前瞻 (?= ( lv)?)
结构中。
有人知道我做错了什么吗?
问题是 \w+
匹配任何一个或多个单词字符,并且前瞻不会消耗它匹配的字符(正则表达式索引保持在原来的位置)。
因此,LV
与 \w+
匹配,因为紧跟其后的是 diastolic dysfunction
,而 ( lv)?
是一个 可选 组(在 diastolic dysfunction
之前可能没有 space+lv
)来匹配 \w+
。
如果您不想匹配 LV
,请添加否定前瞻以限制 \w+
匹配的内容:
\b(?!lv\b)\w+\b(?=(?:\s+lv)?\s+d(?:[iy]a|i)stolic d[yi]sfunction)
另外,注意[iy]
是better way写成(i|y)
.
在R中,你可以定义为
pattern <- regex(
"\b(?!lv\b)\w+\b(?=(?:\s+lv)?\s+d(?:[iy]a|i)stolic\s+d[yi]sfunction)",
ignore_case = FALSE
)
使用\w+
也可以匹配LV,lv
部分是可选的
除了前瞻,您还可以使用捕获组。
\b(?!lv)(\w+)\b (?:lv )?(?:d[iy]astolic|distolic) d[iy]sfunction
我试图从大量回声报告中提取特定类型心脏功能障碍(舒张功能障碍)的程度(Mild
/Moderate
/Severe
)。
Here is the link to the sample excel file with 2 of those echo reports.
这些行通常这样表示:“轻度左室舒张功能障碍”或“轻度舒张功能障碍”。在这里,“温和”是我要提取的。
我写了以下模式:
pattern <- regex("(\b\w+\b)(?= (lv )?(d(i|y)astolic|distolic) d(y|i)sfunction)",
ignore_case = FALSE)
现在,让我们看看结果(记住我想要“温和”部分而不是“LV”部分):
str_view_all(df$echo, pattern)
正如您在“轻度舒张功能障碍”这样的字符串中看到的,该模式正确地选择了“轻度”,但是当谈到“轻度 LV 舒张功能障碍”时,模式选择了“LV”,即使我已经带来了 lv
在一个积极的前瞻 (?= ( lv)?)
结构中。
有人知道我做错了什么吗?
问题是 \w+
匹配任何一个或多个单词字符,并且前瞻不会消耗它匹配的字符(正则表达式索引保持在原来的位置)。
因此,LV
与 \w+
匹配,因为紧跟其后的是 diastolic dysfunction
,而 ( lv)?
是一个 可选 组(在 diastolic dysfunction
之前可能没有 space+lv
)来匹配 \w+
。
如果您不想匹配 LV
,请添加否定前瞻以限制 \w+
匹配的内容:
\b(?!lv\b)\w+\b(?=(?:\s+lv)?\s+d(?:[iy]a|i)stolic d[yi]sfunction)
另外,注意[iy]
是better way写成(i|y)
.
在R中,你可以定义为
pattern <- regex(
"\b(?!lv\b)\w+\b(?=(?:\s+lv)?\s+d(?:[iy]a|i)stolic\s+d[yi]sfunction)",
ignore_case = FALSE
)
使用\w+
也可以匹配LV,lv
部分是可选的
除了前瞻,您还可以使用捕获组。
\b(?!lv)(\w+)\b (?:lv )?(?:d[iy]astolic|distolic) d[iy]sfunction