我正在尝试编写一个正则表达式(在R下),该表达式匹配本文中包含3个字母的所有单词:
tex= "As you are now so once were we"
我的第一次尝试是选择包含3个由空格包围的字母的单词:
matches=str_match_all(tex," [a-z]{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个字母的单词”的例子。