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

时间:2014-04-21 15:39:51

标签: r

我有如下的字符串数据。

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

我想以某种顺序修复数字和字母 数字排在第一位,字母排在第二位,反之亦然。 我该怎么办?

##"53H" "26H" "14M" "47M"

##"H53" "H26" "M14" "M47"

3 个答案:

答案 0 :(得分: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"

数字第一个回答

paste0(nums, lets)
# [1] "53H" "26H" "14M" "47M"

来信第一次回答

paste0(lets, nums)
# [1] "H53" "H26" "M14" "M47"

答案 1 :(得分:6)

您可以使用()在群组中捕获相关部分,然后使用gsub对其进行反向引用:

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

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

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

答案 2 :(得分:2)

根据Ananda Mahto的回答,您可以使用以下代码先订购号码和第二个号码:

gsub("^([A-Z]+)([0-9]+)$", "\\2\\1", a)

因为您要捕获以字母(^([A-Z]+))开头的字符串,然后捕获数字组(([0-9]+)$)/