grep模式从行例如grep(“哦|哦”,字,值= TRUE)

时间:2013-11-21 12:11:21

标签: regex r

使用R中的正则表达式,以下数据示例:

word <-c("Look at this and say: Oh ya," , 
         "Oh thanks!", 
         "what?! Oh my god!",
         "oh, No!", 
         "What's that for?", 
         "Don't you see that? oh you don't care.")

所以我想要模式哦哦或哦:

wordy = grep("Oh|oh", word, , value = TRUE)
wordy

查看结果:

[1] "Look at this and say: Oh ya,"          
[2] "Oh thanks!"                            
[3] "what?! Oh my god!"                     
[4] "oh, No!"                               
[5] "Don't you see that? oh you don't care."

有什么方法可以得到匹配的模式而不是整条线? 例如我想在[1],[3],[5]中删除“哦|哦”之前的单词,但仍然保留“哦|哦”之后的单词

请给我一些提示!非常感谢!

3 个答案:

答案 0 :(得分:3)

如果您想删除单词将使用(g)sub。例如,在这种情况下,在匹配的模式之前删除所有内容....

sub( "^.*(oh|Oh)(.*$)" , "\\1\\2" , wordy )
#[1] "Oh ya,"             "Oh thanks!"         "Oh my god!"         "oh, No!"           
#[5] "oh you don't care."

^字符串开头的零宽度锚点,.*任意字符,(oh|Oh)所需模式的反向引用组,(.*$)第二次反向引用匹配模式之后的所有内容,直到字符串结尾($)。

替换"\\1\\2"定义了我们想要输出的内容,即第一组和第二组括号中匹配的所有内容。因此删除了oh|Oh

匹配的所有内容

答案 1 :(得分:2)

使用stringr::str_match非常容易:

library(stringr)
str_match(word, "[Oo]h.*")

答案 2 :(得分:0)

试试这个:

substr(wordy, regexec("Oh|oh", wordy), nchar(wordy))