正则表达式返回文件名,删除路径和文件扩展名

2024-04-08

我有一个 data.frame,其中包含文件名文本列。我想返回不带路径或文件扩展名的文件名。通常,我的文件名已编号,但并非必须如此。例如:

df<-data.frame(data=c("a","b"),fileNames=c("C:/a/bb/ccc/NAME1.ext","C:/a/bb/ccc/d D2/name2.ext"))

我想返回相当于

df<-data.frame(data=c("a","b"),fileNames=c("NAME","name"))

但我无法弄清楚使用 gsub 执行此操作的巧妙正则表达式。例如,我可以使用以下方法删除扩展名(前提是文件名以数字结尾):

gsub('([0-9]).ext','',df[,"fileNames"])

尽管我一直在尝试各种模式(通过阅读本网站上的正则表达式帮助文件和类似的解决方案),但我无法让正则表达式返回最后一个“/”和第一个“.”之间的文本。非常感谢任何对类似问题的想法或转发!

我得到的最好的结果是:

 gsub('*[[:graph:]_]/|*[[:graph:]_].ext','',df[,"fileNames"])

但这 1) 并没有消除所有前导路径字符,并且 2) 依赖于特定的文件扩展名。


也许这会让您更接近您的解决方案:

library(tools)
basename(file_path_sans_ext(df$fileNames))
# [1] "NAME1" "name2"

The file_path_sans_ext函数来自“tools”包(我相信它通常随 R 一起提供),它将提取直到(但不包括)扩展名的路径。这basename然后函数将删除您的路径信息。

或者,取自file_path_sans_ext并稍微修改一下,你可以尝试:

sub("(.*\\/)([^.]+)(\\.[[:alnum:]]+$)", "\\2", df$fileNames)
# [1] "NAME1" "name2"

在这里,我“捕获”了“fileNames”变量的所有三个部分,因此如果您只想要文件路径,则可以更改"\\2" to "\\1",如果您只想要文件扩展名,则可以将其更改为"\\3".

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式返回文件名,删除路径和文件扩展名 的相关文章

  • 嵌套循环中的索引

    我是 R 和这个网站的新手 我的目标是创建一个 R 函数 在 ggplot2 中生成特殊类型的箱线图 这肯定是不必要的晦涩难懂的代码 我首先需要通过计算稍后希望绘制的变量来处理其中的潜在输入 我首先生成一些随机数据 称为datos c1 r
  • R中按字母顺序对每一行字符串进行排序

    我环顾四周 似乎找不到解决这个问题的好方法 我有一个包含行名称的列 我想按字母顺序对每一行进行排序 以便稍后可以识别具有相同名称但顺序不同的行 数据如下 names lt c John D Josh C Karl H John D Bob
  • VS Code 多行搜索和替换 HTML / XML 标签? [复制]

    这个问题在这里已经有答案了 如何搜索可能包含多个非空行的开始和结束标记
  • Base 64 编码的有效字符范围

    我对以下内容感兴趣 是否有一个字符列表never作为 Base 64 编码字符串的一部分出现 例如 我不确定这种情况是否会发生 如果原始输入实际上有 作为它的一部分 编码会有所不同吗 这是我可以发现的 RFC 4648 http www r
  • 在for循环中重命名ggplot2图

    我有一个关于在 for 循环中创建 ggplot2 图表 根据迭代重命名它们 然后在网格中排列图表的问题 我想做类似这个虚拟示例的事情 library ggplot2 a c 1 2 3 b c 4 5 6 for i in c 1 5 x
  • 非常基本的正则表达式场景与我对 libstdc++-v3 的期望不同

    我得到的行为与我的预期不同 也与 Microsoft C 不同 考虑以下 test cpp 文件 include
  • 匹配不可打印/非 ASCII 字符并从文本中删除

    我的 JavaScript 很生疏 所以任何有关这方面的帮助都会很棒 我需要检测字符串中的不可打印字符 控制字符 如 SOH BS 等 以及扩展 ascii 字符 如 并将其删除 但我不知道如何编写代码 谁能指出我正确的方向来解决这个问题
  • Apache 配置:正则表达式禁止访问以点开头的文件/目录

    我想禁用对其名称以点开头的任何文件或目录的访问 我想出了以下方法 但只有当它们直接位于文档根目录中时 它才会禁用对以 DOT 开头的文件 目录的访问
  • 如何选择独特点

    我是一名 R 程序员新手 我有以下一系列观点 df lt data frame x c 1 2 3 4 y c 6 3 7 5 df lt df gt mutate k 1 df lt df gt full join df by k df
  • R 控制台是我的母语,如何将 R 设置为英语?

    我在 Windows 7 上使用 R 显然 R 不知何故发现了我说英语以外的语言的证据 并且顽固地坚持在控制台中以我自己的语言提供输出 由于多种原因 这是不可取的 我希望 R 是英语 什么有效 我能够使用LANGUAGE en作为 R 控制
  • 按行重塑矩阵

    我有一个大小为 18000 x 54 的矩阵 我想将其重塑为大小为 54000 x 18 的矩阵 其中初始矩阵的每一行都变成一个有 3 行的矩阵 让我们举个例子 我有一个矩阵如下 a matrix 1 18 nrow 2 ncol 9 by
  • R strsplit 问题(容易解决吗?)

    这应该是一件很容易做到的事情 我在这里读到的类似示例有点复杂 而且这些技术对我来说并不真正有效 我有一个名为 id string 的变量 gt typeof id string 1 character and gt id string 1
  • rpy2 在从 R 到 Python 的数据帧中处理 NA/缺失值时出现问题

    我在使用rpy2包进行转换时遇到问题dataframe将 R 中的内容保存到 Python 中 import os os environ R HOME Library Frameworks R framework Resources imp
  • 添加带有错误的弹出窗口,警告闪亮

    有什么办法可以添加一个popup 可关闭的窗口 其中包含警告或其他消息Shiny 我用来构建 Web 应用程序的 R 包 我已经寻找了一段时间但没有任何结果 虽然我不认为有任何本地可用的东西shiny 你可以尝试添加jQueryUI到您的应
  • 在 R 中使用 randomforest() 进行分类?

    我最初有一个由 N 行 12 列组成的数据框 最后一列是我的班级 0 或 1 我必须将整个数据框转换为数字 training lt sapply training temp as numeric 但后来我认为我需要将类列作为因子列来使用 r
  • 使用变量在 r 中像 aes_string 一样选择轴

    我试图提供一个带有列名的变量来创建一个plotly图表 类似于ggplot2 aes string 不知怎的 我被困住了 plot ly iris x Sepal Length y Sepal Width works as expected
  • 如何减小 R Plot 中图例的大小,同时仍使其可读?

    我试图用 R 中的两个 y 轴绘制多年来的一些数据 但是 每当我尝试包含图例时 图例就会主导我的绘图 当我使用其他地方建议的解决方案时 例如keyword和 或使用cex论据 在另一篇文章中建议here https stackoverflo
  • 将 data.frame 的列中的值替换为另一个 data.frame 中的值

    我的情况是 我有一个数据框 其中有一列填充了整数 1 到 6 我想用更具描述性的标签替换这些整数 这些标签在另一个充当 键 的数据框中提供 V1 V2 1 1 LABEL1 2 2 LABEL2 3 3 LABEL3 4 4 LABEL4
  • R:变换不规则时间字符串

    我有两个不同的时间序列 来自不同的数据帧 具有不同的不规则格式 但问题是相同的 我只想提取小时 分钟 秒和毫秒 时代系列看起来像这样 ts1 08 27 23 445 08 27 24 280 08 27 25 115 I tried st
  • Shiny 中的模态对话框:可以调整宽度但不能调整高度

    在我的 Shiny 应用程序中 我有几个来自闪亮BS 包的模式窗口 我可以像这样调整这些模式窗口的宽度 tags head tags style HTML modal lg width 1200px abs 1 background col

随机推荐