如果两个关键字相隔 0 到 3 个单词,则查找它们
Posted
技术标签:
【中文标题】如果两个关键字相隔 0 到 3 个单词,则查找它们【英文标题】:Find two keywords if they are between 0 and 3 words apart 【发布时间】:2022-01-02 19:52:36 【问题描述】:我想识别具有两个关键字的字符串,它们之间有 0 到 3 个单词。在大多数情况下我的工作:
strings <- c(
"Today is my birthday",
"Today is not yet my birthday",
"Today birthday",
"Today maybe?",
"Today: birthday"
)
grepl("Today(\\s\\w+)0,3\\sbirthday", strings, ignore.case = TRUE)
#> [1] TRUE FALSE TRUE FALSE FALSE
由reprex package (v2.0.1) 于 2021 年 11 月 24 日创建
我的问题是字符串"Today: birthday"
。问题是一个词被定义为(\\s\\w+)
,没有让句子包含任何标点符号的选项。如何更好地为 word 定义正则表达式,以便不排除标点符号(最好忽略它)。
【问题讨论】:
【参考方案1】:你可以使用
> grepl("Today(\\W+\\w+)0,3\\W+birthday", strings, ignore.case = TRUE)
[1] TRUE FALSE TRUE FALSE TRUE
另外,考虑使用单词边界、非捕获组和更稳定的 PCRE 正则表达式引擎:
grepl("\\bToday(?:\\W+\\w+)0,3\\W+birthday\\b", strings, ignore.case = TRUE, perl=TRUE)
(?:\W+\w+)0,3\W+
部分匹配零到三个出现的一个或多个非单词字符 (\W+
),然后是一个或多个单词字符 (\w+
),然后是一个或多个非单词字符。
【讨论】:
太棒了,谢谢。事后看来,这似乎是一个非常明显的解决方案:D以上是关于如果两个关键字相隔 0 到 3 个单词,则查找它们的主要内容,如果未能解决你的问题,请参考以下文章