使用带有可变数量的#s

时间:2018-06-07 14:59:28

标签: r

这是我陷入困境的问题之一 - 并且因为必须有另一种方式而感到沮丧:

我想要实现的是在R中解析很多路径/文件名。名称是这样的:

name1 <- "alpha234#181225235959/alpha234#181225235959_pic_4_1-8_9_19_90.dat"
name2 <- "alpha123#181225235959#Tag/alpha123#181225235959#Tag_pic_4_1-8_9_19_90.dat"

我想要的是在第一个/之前剥离该位,并且在/之后有一个字符串对应于#之后的东西,直到第一个#和另一个之后的东西。第一个#,包括后续/个。

以下是我在第一步中所做的事情(直到splitname1 <- strsplit(name1, "/") splitname1 [[1]] [1] "alpha234#181225235959" "alpha234#181225235959_pic_4_1-8_9_19_90.dat" ):

name2

,同样适用于splitname2 <- strsplit(name2, "/") splitname2 [[1]] [1] "alpha123#181225235959#Tag" "alpha123#181225235959#Tag_pic_4_1-8_9_19_90.dat"

strsplit

这就是问题所在。我使用strsplit(splitname1[[1]][2], "#") [[1]] [1] "alpha234" "181225235959_pic_4_1-8_9_19_90.dat" strsplit(splitname2[[1]][2], "#") [[1]] [1] "alpha123" "181225235959" "Tag_pic_4_1-8_9_19_90.dat" 处理上述步骤中的“尾部”:

paste

然后我得到两个字符串或一个。没有任何jQuery("#mod-expert").submit(function () { var formNm = jQuery('#mod-expert'); $.ajax({ type: "POST", url: '/notify', data: formNm.serialize(), success: function (data) { // Вывод текста результата отправки jQuery(".message").removeClass("hidden"); jQuery(".message-text").html(data); jQuery(".overlay").removeClass("hidden"); }, error: function (jqXHR, text, error) { // Вывод текста ошибки отправки jQuery(".message").removeClass("hidden"); jQuery(".message-text").html(error); jQuery(".overlay").removeClass("hidden"); } }); return false; });以及我考虑过的其他内容设法将两个字符串合并成一个可以处理这两种情况的方式(需要与否的地方)。

必须有更好的方法。

2 个答案:

答案 0 :(得分:0)

使用sub是一个选项:

name1 <- "alpha234#181225235959/alpha234#181225235959_pic_4_1-8_9_19_90.dat"
sub("^.*?/(.*?)#.*$", "\\1", name1)
sub("^.*?/.*?#(.*)$", "\\1", name1)

[1] "alpha234"
[1] "181225235959_pic_4_1-8_9_19_90.dat"

Demo

答案 1 :(得分:0)

我不是100%确定您希望输出显示的内容,但我认为paste选项collapse = '#'会有所帮助:

name1 <- "alpha234#181225235959/alpha234#181225235959_pic_4_1-8_9_19_90.dat"
name2 <- "alpha123#181225235959#Tag/alpha123#181225235959#Tag_pic_4_1-8_9_19_90.dat"

name_list <- list(name1, name2)

lapply(name_list, function(x) {
  tmp <- strsplit(strsplit(x, "/")[[1]][2], "#")[[1]]
  c(tmp[1], paste(tmp[-1], collapse = "#"))
})
# [[1]]
# [1] "alpha234"                           "181225235959_pic_4_1-8_9_19_90.dat"
# 
# [[2]]
# [1] "alpha123"                               "181225235959#Tag_pic_4_1-8_9_19_90.dat"