【发布时间】:2014-10-31 19:30:46
【问题描述】:
如何删除 R 中两个特定模式之间的字母?
例如
a= "a#g abcdefgtdkfef_jpg>pple"
我想删除#g和jpg>之间的所有字母
a1="apple"
我试图在stringr 中找到一些功能,但我找不到
【问题讨论】:
-
你拼错了'stringr'。
如何删除 R 中两个特定模式之间的字母?
例如
a= "a#g abcdefgtdkfef_jpg>pple"
我想删除#g和jpg>之间的所有字母
a1="apple"
我试图在stringr 中找到一些功能,但我找不到
【问题讨论】:
无需为此操作加载包。您可以使用基本 R 函数sub。它用于匹配第一次出现的正则表达式。
a <- "a#g abcdefgtdkfef_jpg>pple"
sub("#g.*jpg>", "", a)
# [1] "apple"
#g 匹配 "#g"
.* 匹配除\n 之外的任何字符(零次或多次)jpg> 匹配 "jpg>"
因此,我们将删除从 #g 到 jpg> 的所有内容
关于您的评论
我试图在 stringR 中找到一些函数,但我找不到
实际上拼写为stringr(区分大小写)。你可以使用str_replace。
library(stringr)
str_replace(a, "#g.*jpg>", "")
# [1] "apple"
【讨论】:
"#.*jpg>"
stringr::str_replace() 而不是sub()?
stringr 并且找不到此功能。对于正则表达式,我更喜欢 base R
stringr!
我想添加到 Rich 的答案中,因为当需要在同一文本中进行多次替换时,它不起作用。
如果你想在同一个字符串中多次删除,你需要稍微调整一下代码:
a <- "a#g abcdefgtdkfef_jpg>pple
or#g abcdefgtdkfef_jpg>ange
ma#g abcdefgtdkfef_jpg>ngo"
# Code to get the individual fruits
gsub("#g.*?jpg>", "", a)
# Output
# [1] "apple orange mango"
【讨论】:
stringr,还有str_replace_all。
除了之前的回复,如果您使用类似于"a#g abcdefgtdkfef_jpg>pple ; #__something_else___jpg>" 的字符串,其中一些方法将使用"#.*jpg>" 之类的表达式子化整个字符串,结果您将得到一个空字符串。为避免这种情况,您可以使用 R 正则表达式"#[^jpg>]+jpg>",这将允许您更有选择性地匹配模式。
【讨论】:
[^jpg>]+ 不是指*任何文本,而是一个jpg> 序列。这是一种误导性模式,不应使用。