修复具有字母和数字组件的字符串的顺序

out*_*ird 3 r

我有如下的字符串数据.

a <- c("53H", "H26","14M","M47")
##"53H" "H26" "14M" "M47"
Run Code Online (Sandbox Code Playgroud)

我想按照一定的顺序修正数字和字母,这样数字首先出现,字母排在第二位,反之亦然.我该怎么做?

##"53H" "26H" "14M" "47M"
Run Code Online (Sandbox Code Playgroud)

要么

##"H53" "H26" "M14" "M47"
Run Code Online (Sandbox Code Playgroud)

Ric*_*ven 12

您可以单独提取数字和字母gsub,然后使用paste0 它们按照您喜欢的顺序排列.

a <- c("53H", "H26","14M","M47")
( nums <- gsub("[^0-9]", "", a) )    ## extract numbers
# [1] "53" "26" "14" "47"
( lets <- gsub("[^A-Z]", "", a) )    ## extract letters
# [1] "H" "H" "M" "M"
Run Code Online (Sandbox Code Playgroud)

数字第一回答:

paste0(nums, lets)
# [1] "53H" "26H" "14M" "47M"
Run Code Online (Sandbox Code Playgroud)

信件第一回答:

paste0(lets, nums)
# [1] "H53" "H26" "M14" "M47"
Run Code Online (Sandbox Code Playgroud)


A5C*_*2T1 6

您可以使用以下方式捕获组中的相关部分(),然后使用gsub以下方式对其进

a <- c("53H", "H26","14M","M47")

gsub("^([0-9]+)([A-Z]+)$", "\\2\\1", a)
# [1] "H53" "H26" "M14" "M47"
Run Code Online (Sandbox Code Playgroud)

这就像是说"在我的字符串的开头找到一组数字并将它们捕获到一个组中(^([0-9]+)).然后找到一组字母,这些字母一直在我的字符串的末尾并在第二组中捕获它们(([A-Z]+)).这是我的搜索模式.接下来,替换它,使得第一组(引用\\2)首先返回,第一组(引用\\1)返回第二组).