繁体   English   中英

删除R中两种字符串模式之间的字母

[英]Remove the letters between two patterns of strings in R

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

例如

a= "a#g abcdefgtdkfef_jpg>pple"

我想删除#gjpg>之间的所有字母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"

添加到之前的回复中,如果您使用看起来像"a#g abcdefgtdkfef_jpg>pple ; #__something_else___jpg>"的字符串,其中一些方法将使用类似"#.*jpg>"的表达式来细分整个字符串,并且结果你会得到一个空字符串。 为避免这种情况,您可以使用 R 正则表达式"#[^jpg>]+jpg>"这将允许您更有选择地匹配模式。

我想添加到 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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM