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

时间:2017-02-19 05:37:49

标签: 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 Grass Greener? (#1.1)}   2006
"1941" (2009) {(#1.9)}                  ????
"1942" (2011)                       2011-????

我需要将其分为系列名称|制作日期|剧集名称|发布年份

剧集名称不均匀(可能存在也可能不存在),如上面的1942年(最后一个记录)的情况所示.Hence我将计算最后一个字符中的字符。

目前,我已完成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-????

我有前2个管道使用sub但无法获得第3个。 请有人帮忙

1 个答案:

答案 0 :(得分:1)

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

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

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