R 正则表达式,用于匹配最后一个反斜杠和最后一个点之间的所有内容。

3
full.path = 'C:\Users\me\Desktop\Data\my_file.csv'

我无法确定正确的正则表达式,以便仅保留这个内容


essential.name = 'my_file'

很抱歉,我一直无法正确编码最后一个反斜杠


2
你的输入full.path在Windows上无法工作。我认为你需要两个反斜杠。 - akrun
这第一行对我来说返回了一个错误。我建议你使用正斜杠。 - lmo
^.*\\([^.]*)[.].*$ 但是为什么要使用正则表达式呢? - Tensibai
谢谢@Tensibai,否则你会如何grep所需的输出?我需要将其用作sub函数参数的正则表达式。 - Amitai
1
请参考@akrun的答案,使用专门用于解析路径和文件名的函数。在这里,正则表达式并不是最好的方法,因为存在许多陷阱(例如文件名中包含点等)。 - Tensibai
2个回答

4
一种独立于平台的正则表达式解决方案也可以是这样的:
> full.path = 'C:\\Users\\me\\Desktop\\Data\\my_file.csv'
> sub(".*\\\\([^.]*).*", "\\1", full.path)
[1] "my_file"

请查看在线R演示.

详细信息:

  • .* - 匹配0个或多个字符,尽可能多地匹配直到最后一个...
  • \\\\ - 匹配字面上的\符号
  • ([^.]*) - 第一组捕获除点号以外的任意字符
  • .* - 匹配其余的字符直到结尾。

\\1只是将第一组的内容插入到结果中。


说实话,对于当前的 OP 要求来说,更正确的正则表达式是 sub(".*\\\\(.*?)(?:\\.[^.]*)?$", "\\1", full.path)。它将支持带有点的文件名,同时仍然允许没有点的文件名。 - Wiktor Stribiżew

3
我们可以使用tools中的basenamefile_path_sans_ext来提取文件名。
tools::file_path_sans_ext(basename(full.path))
#[1] "my_file"

如果我们需要使用正则表达式,可以使用 gsub

gsub(".*\\\\|\\..*$", "", full.path)
#[1] "my_file"

数据

full.path = 'C:\\Users\\me\\Desktop\\Data\\my_file.csv'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接