r - 如何在具有不同含义的多个相同单词的行上执行正则表达式?
问题描述
我有一句话。我的爸爸、爷爷和曾曾祖父长得很像。如何使用 grep 创建正则表达式来获取爸爸、爷爷、伟大的伟大数据价值。
我尝试使用
str_extract_all(pattern = "(great)?\s(grand)?(father|mother)", sentence)
但收效甚微。
解决方案
以下正则表达式应该可以工作:
\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 )*granddad
将great great granddad
首先匹配,然后是great granddad
(实际上并没有出现在您的句子中),最后是granddad
.
推荐阅读
- javascript - 按 d3 映射中的属性过滤
- asp.net - 如何使用 asp.net core 重写 URL
- python - python:从函数返回异常
- php - 带有漂亮 URL 的 Yii 分页
- sql - Oracle - 遍历多个表的匿名过程(动态) - 查询返回多行
- c++ - 为什么我的 isdigit() 函数返回的是 ascii 代码而不是 int,我该如何防止它?
- c++ - 以下使用 3 个嵌套循环的代码的时间复杂度
- ios - 有没有办法在 swift 4 中更改 UINavigationBar 的背景颜色
- java - 输入字段上的 Selenium NoSuchElementException
- git - .gitlab-ci.yml Gitlab 部署 SFTP 不工作