如果两个关键字相隔 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 个单词,则查找它们的主要内容,如果未能解决你的问题,请参考以下文章

单词最近距离

几个简单的算法

Python - 比较 2 个单词并检查它们是不是是字谜

在Pandas Dataframe列中查找某些单词,如果找到,则将它们添加到新列中

关联容器

可查找重复元素的二分查找算法