![](/img/trans.png)
[英]In R, how can I manipulate variable in dataframe using regular expression?
[英]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"))
这是一个活生生的例子。
这是使用带有stringr
的str_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.