使用R替换字符串中元素的位置

时间:2017-09-02 09:28:28

标签: r string replace

我有一个字符串:

str = 'Mr[5]'

我想在Mr中切换5str的位置,并得到如下结果:

result = '[5]Mr'

我怎样才能在R?

中这样做

2 个答案:

答案 0 :(得分:6)

您可以使用具有2个匹配组的正则表达式来更改位置。 stringr包有助于角色操作。

s <- c("Mr[5]", "Mr[3245]", "Mrs[98j]")
stringr::str_replace_all(s, "^(.*)(\\[.*\\])$", "\\2\\1")
#> [1] "[5]Mr"    "[3245]Mr" "[98j]Mrs"

关于正则表达式

  • ^是字符串的开头,$结束
  • .*匹配每个字符,零个或多个时间
  • ()定义匹配组
  • \\[\\]匹配文字括号
  • 你有一个简单的正则表达式匹配例子Mr然后[5]"(.*)(\\[.*\\])"
  • \\1指的是第一个匹配组,\\2指的是第二个匹配组。 \\2\\1反转群组

显然,您可以创建一个更符合您需求的更好的正则表达式。具有匹配组的机制保持不变。 regex101是一个很好的网站,可以帮助您使用正则表达式。 在R中,stringr网站有关regex

的简介

答案 1 :(得分:4)

您可以使用gsub

values <- c("Mr[5]","Mr[1234]", "Mrs[456]")
values2 <- gsub("^(.+)(\\[[0-9]+\\])$", "\\2\\1", values)

# > values2
# [1] "[5]Mr"    "[1234]Mr" "[456]Mrs"