使用正则表达式提取文件名

时间:2010-11-15 19:05:48

标签: regex

我需要能够从以下行中提取文件名(info.txt):

07/01/2010  07:25p                 953 info.txt

我已尝试使用此功能:/d+\s+\d+\s+\d+\s+(?.?) /,但它似乎无效...

4 个答案:

答案 0 :(得分:3)

怎么样

/\S+$/

即。该行末尾最长的非空格字符串。 (如果没有关于可能输入的更多信息,很难确定。)

正如@J V指出的那样,上面的regexp将无法正确解析其中包含空格的文件名(如他的用户名)。我们不知道这是否可能。

但我怀疑我们正在查看Windows DIR命令的输出,或类似的东西。在这种情况下,最可靠的方法可能只是砍掉前39个字符并保留其余字符:

/^.{39}(.+)$/

然后$1将包含文件名。

更好的选择:

但是如果您使用的是Windows DIR(根据您的新评论),并且您可以控制DIR命令,请尝试

DIR /b

删除不需要的部分(假设您不需要日期,大小等),并为每行提供一个文件名。

好的,你正在使用Unix目录(根据更新的评论)。 CentOS目录我每行输出一个文件,没有别的,当你给它没有命令行选项时。机会非常好,无论您使用哪个目录都可以说服输出这样的文件名......那么您就不必担心使用正则表达式可能会或可能不正确的每个可能的输入。请尝试man dirdir --help找出要使用的命令行选项。

答案 1 :(得分:0)

\d\d:\d\d\w\s+\d+\s+(.*?)$

$1将是文件名

原始正则表达式的问题在于忘记了特殊字符:/,而(?.?)表示没有...

答案 2 :(得分:0)

假设文件的扩展名为.txt,您可以尝试。

  (?<=(\s)*)\w*.txt

答案 3 :(得分:-1)

为什么不使用以下正则表达式:

\w+\.\w+
相关问题