正则表达式(R)中的连续比赛

时间:2016-08-28 07:10:23

标签: regex r stringr

我正在尝试编写一个正则表达式(在R下),该表达式匹配本文中包含3个字母的所有单词:

tex= "As you are now so once were we"

我的第一次尝试是选择包含3个由空格包围的字母的单词:

matches=str_match_all(tex," [a-z]{3} ")

它应匹配“你”“是”“现在”。但是,由于其中一些空格是在匹配的字符串之间共享的,因此我只能“你”“现在”

有没有办法解决这个问题?

提前致谢

3 个答案:

答案 0 :(得分:3)

使用单词边界(\\b

可能更好
library(stringr)
str_match_all(tex,"\\b[a-z]{3}\\b")[[1]]
#   [,1] 
#[1,] "you"
#[2,] "are"
#[3,] "now"

或者我们也可以使用str_extract

str_extract_all(tex,"\\b[a-z]{3}\\b")[[1]]
#[1] "you" "are" "now"

答案 1 :(得分:0)

 tex= "As you are now so once were we"

基础R功能

regmatches(tex , gregexpr('\\b[a-z]{3}\\b' , tex))[[1]]

 [1] "you" "are" "now"

答案 2 :(得分:-1)

试试这个:

\b[a-zA-Z]{3}\b

这是有效的,因为\b与空白/标点符号本身不匹配,而是与单词边界的位置相匹配,因此空格不包含在匹配中。

您还希望在字符范围中包含A-Z以包含大写字母。

这取自http://regexr.com/中的例子,他们有一个“4个字母的单词”的例子。