【问题标题】:Remove the letters between two patterns of strings in R删除R中两个字符串模式之间的字母
【发布时间】:2014-10-31 19:30:46
【问题描述】:

如何删除 R 中两个特定模式之间的字母?

例如

a= "a#g abcdefgtdkfef_jpg>pple"

我想删除#gjpg>之间的所有字母

a1="apple"

我试图在stringr 中找到一些功能,但我找不到

【问题讨论】:

  • 你拼错了'stringr'。

标签: regex r string


【解决方案1】:

无需为此操作加载包。您可以使用基本 R 函数sub。它用于匹配第一次出现的正则表达式。

a <- "a#g abcdefgtdkfef_jpg>pple"
sub("#g.*jpg>", "", a)
# [1] "apple"

Regular expression explained:

  • #g 匹配 "#g"
  • .* 匹配除\n 之外的任何字符(零次或多次)
  • jpg&gt; 匹配 "jpg&gt;"

因此,我们将删除从 #gjpg&gt; 的所有内容


关于您的评论

我试图在 stringR 中找到一些函数,但我找不到

实际上拼写为stringr(区分大小写)。你可以使用str_replace

library(stringr)
str_replace(a, "#g.*jpg>", "")
# [1] "apple"

【讨论】:

  • 为了严格遵守请求,它将是"#.*jpg&gt;"
  • 了解为什么有人更喜欢stringr::str_replace() 而不是sub()
  • @JoshO'Brien 不,但我添加它是因为 OP 提到他们正在寻找 stringr 并且找不到此功能。对于正则表达式,我更喜欢 base R
  • 啊,是的。在这种情况下,很高兴您至少向他们展示了他们并不需要stringr
【解决方案2】:

我想添加到 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
【解决方案3】:

除了之前的回复,如果您使用类似于"a#g abcdefgtdkfef_jpg&gt;pple ; #__something_else___jpg&gt;" 的字符串,其中一些方法将使用"#.*jpg&gt;" 之类的表达式子化整个字符串,结果您将得到一个空字符串。为避免这种情况,您可以使用 R 正则表达式"#[^jpg&gt;]+jpg&gt;",这将允许您更有选择性地匹配模式。

【讨论】:

  • [^jpg&gt;]+ 不是指*任何文本,而是一个jpg&gt; 序列。这是一种误导性模式,不应使用。
猜你喜欢
  • 2016-07-01
  • 2021-05-26
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
相关资源
最近更新 更多