首页 > 解决方案 > 如何在具有不同含义的多个相同单词的行上执行正则表达式?

问题描述

我有一句话。我的爸爸、爷爷和曾曾祖父长得很像。如何使用 grep 创建正则表达式来获取爸爸、爷爷、伟大的伟大数据价值。

我尝试使用 str_extract_all(pattern = "(great)?\s(grand)?(father|mother)", sentence)但收效甚微。

标签: rpattern-matching

解决方案


以下正则表达式应该可以工作:

\b(?:(?:great )*granddad|dad)\b

代码:

sentence <- "My dad, granddad and great great granddad looks alike."
str_extract_all(pattern = "\\b(?:(?:great )*granddad|dad)\\b", sentence)[[1]]

[1] "dad"                  "granddad"             "great great granddad"

演示

这里的诀窍是使用替代,就像您已经使用的那样,但首先放置具体的术语。该模式(?:great )*granddadgreat great granddad首先匹配,然后是great granddad(实际上并没有出现在您的句子中),最后是granddad.


推荐阅读