gsub替换最后一个字符串的未知长度的最后space

Gsub replace the last space of an unknown length of the last string

我有这个数据,其中包含电视剧数据

"!Next?" (1994)                     1994-1995
"#1 Single" (2006)                  2006-????
"#1 Single" (2006) {Cats and Dogs (#1.4)}       2006
"#1 Single" (2006) {Finishing a Chapter (#1.5)}     2006
"#1 Single" (2006) {Is the Grass Greener? (#1.1)}   2006
"1941" (2009) {(#1.9)}                  ????
"1942" (2011)                       2011-????

我要把这个分成系列名|生产日期|剧集名称|发行年份

剧集名称不均匀(可能存在也可能不存在),如上文 1942 年(最后一条记录)的情况所示。因此我将从最后一个字符开始计算字符数。

目前,我已经完成了name| production date|,但是在发布年份之前添加一个pipe(|)有点乏味。

我想要这样的输出

"!Next?" |1994|                     |1994-1995
"#1 Single" |2006|                  |2006-????
"#1 Single" |2006| {Cats and Dogs (#1.4)}       |2006
"#1 Single" |2006| {Finishing a Chapter (#1.5)}     |2006
"#1 Single" |2006| {Is the Grass Greener? (#1.1)}   |2006
"1941" |2009| {(#1.9)}                  |????
"1942" |2011|                       |2011-????

我使用 sub 获得了前 2 个管道,但无法获得第 3 个。 如果有人可以帮助,请

您可以使用反向引用来完成此类任务(input 是要修改的字符串向量):

gsub(pattern = "([0-9?-]+$)",
     replacement = "|\1",
     x = input)

基本上它搜索位于末尾的最大字符串,该字符串由数字组成,“?”和 ”-”;获取该字符串并通过前面的“|”替换为其修改后的副本。