R Gsub替换最后一个字符串未知长度的最后一个空格

R Gsub替换最后一个字符串未知长度的最后一个空格,r,regex,substring,gsub,R,Regex,Substring,Gsub,我有这个数据,其中包含电视连续剧的数据 "!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 G

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

"!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个管道。
如果有人能提供帮助,请使用backreference进行此类任务(
input
是要修改的字符串向量):


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

根据您在此处共享的数据,您只需将
}
下放到
}
中,它应该在插曲名称后放置一个管道……如果没有插曲名称,生产日期上的“开”将用作它和播放日期之间的分隔符。@Bethanip但问题是所有记录的数据中都没有
}
,这就是问题所在……因此我考虑从最后一个字符开始执行此操作……例如,最后一条记录。。如果你能在最后一个字符的帮助下帮我创建一个正则表达式,使用
$
gsub(pattern = "([0-9?-]+$)",
     replacement = "|\\1",
     x = input)