使用 R 在句子中重新定位包含在 [ ] 中的单词

Reposition the words enclosed in [ ] in a sentence using R

[VN] [Ren'Py] Game1 [Author1]

[VN] [Ren'Py] Game2 [Author2]

[VN] [Ren'Py] Game3 [Author3]

我将这 3 行保存在一个文本文件中。我想重新排列它们,使我的 output 看起来像:

Game1 [Author1] [VN] [Ren'Py]

Game2 [Author2] [VN] [Ren'Py]

Game3 [Author3] [VN] [Ren'Py]

当我第一次将文本文件读入 RStudio 时,它创建了一个包含 1 个变量的数据框,所有游戏名称的 class 都是字符。

a = read.csv("games.txt")

然后我使用 grepl 提取所有包含 [ ]

的名称
b = a$name[grepl("\[.*", a$name)]

我又遇到了一个问题。我实际上只想 grepl 那些以 [

开头的名字
b = a$name[grepl("^\[.*", a$name)]

但是使用插入符号不起作用。这样做给了我一个 0 列和 3 行的数据框

现在,b是一个长度为3的字符,运行ning

b[1]
b[2]
b[3]

分别给我每个游戏的全名

然后我运行 strsplit 用空格分隔游戏的单词

c = strsplit(b, " +")

现在 c 属于 class 长度为 3

的“列表”

然后我尝试运行这个代码

seq = 1 : length(c)
y = NULL
for (i in seq){
  tmp <- c[[i]][1]
  y[i] = tmp
  c[[i]][-1]
}

理想情况下,这应该从 c[[1]] 中提取 [VN],将其存储在 y[1] 中,然后从 c[[1]].

中删除 [VN]

但是,y 每次都会被重写,当循环完成时,只有 c[[3]][1] 存储在 y 中。

我现在被困在这里,对如何继续获取输出一无所知。请指教

这是您要找的吗?

数据:

x <- c("[VN] [Ren'Py] Game1 [Author1]")

解决方案:

sub("(\[[^[]+) (\[[^[]+) (\w+) (\[[^[]+)", "\3 \1 \2 \4", x)

结果:

[1] "Game1 [VN] [Ren'Py] [Author1]"