在R语言中将字符串中的数字移至末尾的实现方法求助
解决方案
你的问题出在正则表达式的捕获组使用错误:你只定义了1个捕获组(\\d),但替换时用了\\2,这会导致数字后面的空格被空内容替换,出现1AN这类拼接错误。以下是两种可行的实现方式:
方法一:分步处理(直观易懂)
使用stringr工具包的函数先提取数字,再移除原字符串中的数字,最后将数字拼接至末尾:
library(dplyr) library(stringr) df <- df %>% mutate( # 提取字符串中的1-2位数字 num = str_extract(a, "\\d{1,2}"), # 移除原字符串中的数字及其前后的空格 a = str_remove(a, "\\s*\\d{1,2}\\s*"), # 将数字拼接至处理后的字符串末尾 a = str_c(a, " ", num) ) %>% # 移除临时生成的num列 select(-num)
运行后得到的结果:
# A tibble: 2 x 1 a <chr> 1 THIS IS AN EXAMPLE 1 2 THIS IS AN EXAMPLE 2
方法二:单步正则替换
通过定义多个捕获组,一次性完成替换:
df <- df %>% dplyr::mutate(a = gsub("^(.*)\\s+(\\d{1,2})\\s+(.*)$", "\\1 \\3 \\2", a))
正则说明:
^(.*):捕获数字前的所有内容\\s+(\\d{1,2})\\s+:捕获1-2位数字及其前后的空格(.*)$:捕获数字后的所有内容- 替换规则
\\1 \\3 \\2:将数字前内容 + 数字后内容 + 空格 + 数字拼接起来
内容的提问来源于stack exchange,提问作者kiyis_stats
相关产品推荐
相关产品推荐

