繁体   English   中英

使用正则表达式,在 r 中找到匹配项后如何添加元素?

[英]Using regular expression, how can I add elements after I find a match in r?

我有一列具有数字长度范围为 10 和 11 的字符串。这是列中一些值的示例:

column=c("5699420001","00409226602")

如何在前四位数字之后(在 10 个字符的字符串中)和前五位数字之后(在具有 11 个字符的字符串中)以及两个长度的后四位数字之后放置连字符? Output 在下面提供。 我想为此使用stringr

column_standard=c("5699-4200-01","00409-2266-02")

尝试使用这个作为你的表达:

\b(\d{4,5})(\d{4})(\d{2}\b)

它设置了三个捕获组,您以后可以在替换中使用它们来轻松地在它们之间添加连字符。

然后你只需替换为:

\1-\2-\3

感谢@Dunois 指出它在代码中的外观:

column_standard <- sapply(column, function(x) stringr::str_replace(x, "^(\\d{4,5})(\\d{4})(\\d{2})", "\\1\\-\\2-\\3"))

这是一个活生生的例子

这是使用带有stringrstr_replace() function 的捕获组的解决方案:

library(stringr)

column <- c("5699420001","00409226602")

column_standard <- sapply(column, function(x){
  ifelse(nchar(x) == 11, 
         stringr::str_replace(x, "^([0-9]{5})([0-9]{4})(.*)", "\\1\\-\\2-\\3"),
         stringr::str_replace(x, "^([0-9]{4})([0-9]{4})(.*)", "\\1\\-\\2-\\3"))
})

column_standard

#     5699420001     00409226602 
# "5699-4200-01" "00409-2266-02"

代码应该是不言自明的。 我可以根据要求提供详细的解释。

暂无
暂无

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

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