【问题标题】:How to replace text in R using regular expression? [duplicate]如何使用正则表达式替换 R 中的文本? [复制]
【发布时间】:2015-07-29 02:22:03
【问题描述】:

我有一个字符串向量,看起来像这样:c("abc@40gmail.com", "xyz@50gmail.com")。出于某种原因,@ 之后有随机/不同的数字,我正在尝试删除它们。使用正则表达式,我如何告诉 R 删除或替换 "@" 之后的数字,所以我最终得到 c("abc@gmail.com", "xyz@gmail.com")。我对正则表达式了解不多,所以如果有人不仅能提供代码,还能提供代码的简要说明,我将不胜感激。谢谢!

【问题讨论】:

  • @Thomas 是骗子吗?从现在开始,每个文本替换问题都是gsub("e", "", x) 的欺骗? “dupe”中的正则表达式是完全匹配类型,而在这个问题中,它有点复杂

标签: regex r string


【解决方案1】:

您可以使用 Positive lookbehind 或 \K

sub("(?<=@)\\d+", "", x, perl=T)

\\d+ 匹配一个或多个数字字符。所以(?&lt;=@) 强制正则表达式引擎紧跟@ 符号,然后使其匹配以下一个或多个数字字符。由于lookarounds属于PCRE家族,需要开启perl=TRUE参数。

或

sub("@\\K\\d+", "", x, perl=T)

【讨论】:

  • 非常感谢!你有什么理由不使用更简单的sub("@\\d+", "@", x)?
  • @hsl 因为它已经被提及。我们可以为一个基于正则表达式的问题写至少两个答案。 :-) 这就是正则表达式的美妙之处。
【解决方案2】:

一个选项是

x <- c("abc@40gmail.com", "xyz@50gmail.com")
sub("@\\d+", "@", x)
## [1] "abc@gmail.com" "xyz@gmail.com"

【讨论】:

  • @ColonelBeauvel,好的,然后是 nvm。
猜你喜欢
  • 2018-03-16
  • 2018-08-11
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
相关资源
最近更新 更多