使用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]中删除“哦|哦”之前的单词,但仍然保留“哦|哦”之后的单词
请给我一些提示!非常感谢!
答案 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))