【问题标题】:Gsub replace the last space of an unknown length of the last stringgsub 替换最后一个字符串长度未知的最后一个空格
【发布时间】:2023-03-10 19:11:02
【问题描述】:

我有这个包含电视剧数据的数据

"!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 个。 如果有人可以帮忙,请帮忙

【问题讨论】:

  • 根据您在此处共享的数据,您可以简单地将}} | 合并,它应该在剧集名称之后放置一个管道......如果没有剧集名称,制作日期的 on 将作为它和播出日期之间的分隔符。
  • @bethanyP 但问题是所有记录的数据中都没有}...这就是问题...因此我想从最后一个字符开始...例如最后一条记录.. 如果你可以帮助我在最后一个字符的帮助下创建一个正则表达式,例如使用 $

标签: r regex substring gsub


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多