基于句子中的计数的单词

时间:2015-09-29 17:21:44

标签: regex r gsub

这个想法是根据给定的单词数量,通过分隔符将句子中的单词分开。在此示例中,计数为2:

  my.name <- c("Remi Whatname Say again")

结果应该是:

  "Remi Whatname * Say again" 

这是我能走多远:

gsub('([[:alpha:]]{2,})','\\1 *\\2',my.name,perl=T)  
> my.name
 "Remi * Whatname * Say * again *"

任何想法如何改进我的模式匹配,以便在检测到连续2个单词之后减少替换?多谢你们。

3 个答案:

答案 0 :(得分:1)

> x <- c("Remi Whatname Say again", "Hi how ru?")
> gsub("(\\S+\\s+\\S+)\\b(?!$)", "\\1 *", x, perl=T)
[1] "Remi Whatname * Say again" "Hi how * ru?" 

正如@Mariano所说,

gsub("((?:\\S+\\s+){2})", "\\1* ", x, perl=T)

答案 1 :(得分:0)

您正在搜索长度至少为2的字符串,但不包括空格。最简单的 - 尽管可能不是最干净的只是将要求添加到您已经尝试过的内容中:

gsub('([[:alpha:]]{2,}[[:space:]][[:alpha:]]{2,})','\\1 *\\2',my.name,perl=T)

答案 2 :(得分:0)

((?:(?:\\w+)\\s+){2})(?=\\w+)

您可以使用它并替换为\\1*。请参阅演示。

https://regex101.com/r/fW9yN5/1