我有一个字符串:
str = 'Mr[5]'
我想在Mr
中切换5
和str
的位置,并得到如下结果:
result = '[5]Mr'
我怎样才能在R?
中这样做答案 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"