我想使用正则表达式获取文件名,所以我一直在尝试简单的事情,比如
([^\.]*)
当然只有文件名有一个扩展名才有效。但如果是adfadsfads.blah.txt
,我只想要adfadsfads.blah
。我怎么能用正则表达式做到这一点?
关于David的问题,'为什么你会使用正则表达式',答案是'为了好玩'。事实上,我使用的代码很简单
length_of_ext = File.extname(filename).length
filename = filename[0,(filename.length-length_of_ext)]
但我喜欢尽可能学习正则表达式,因为它总是出现在Geek鸡尾酒派对上。
答案 0 :(得分:37)
试试这个:
(.+?)(\.[^.]*$|$)
这将:
注意:正如评论者j_random_hacker所建议的那样,这与广告一样,但为了便于阅读,您可能希望在事物之前加上一个锚。
答案 1 :(得分:4)
所有内容后跟一个点后跟一个或多个不是点的字符,后跟字符串结尾:
(.+?)\.[^\.]+$
将最后一个点之前的所有内容分组以便于检索。
如果您不是100%确定每个文件都有扩展名,请尝试:
(.+?)(\.[^\.]+$|$)
答案 2 :(得分:3)
2对于结尾捕获一个,为文件名捕获一个。
例如
(.+?)(?:\.[^\.]*$|$)
答案 3 :(得分:1)
^(.*)\\(.*)(\..*)$
\
.
示例:
c:\1\2\3\Books.accdb
(c:\1\2\3)(Books)(.accdb)
文件名中不支持多个.
是否支持文件路径中的.
答案 4 :(得分:1)
我意识到这个问题有点过时了,但是,我在找到一个好的来源时遇到了一些麻烦,最终自己制作了正则表达式。为了拯救可能找到这个时间的人,
如果您正在寻找~独立的~正则表达式
这将匹配没有点的扩展
\w+(?![\.\w])
这将始终匹配文件名如果它有扩展名
[\w\. ]+(?=[\.])
答案 5 :(得分:0)
好的,我不知道为什么我会使用正则表达式。如果我知道该字符串是一个完整的文件路径,那么我将使用另一个API来获取文件名。正则表达式非常强大但同时相当复杂(您刚刚通过询问如何创建这样一个简单的正则表达式来证明)。有人说:你有一个问题,你决定使用正则表达式来解决它。现在你有两个问题。
再想一想。例如,如果您使用的是.NET平台,请查看System.IO.Path类。
答案 6 :(得分:0)
我使用这种模式进行简单搜索:
^\s*[^\.\W]+$
本文:
file.ext
fileext
file.ext.ext
file.ext
fileext
它在第二行和最后一行中找到fileext
我将它应用于文件夹的文本树视图(空格为缩进)。
答案 7 :(得分:0)
只是文件名,不带路径和后缀。
application/json
答案 8 :(得分:0)
试试
(?<=[\\\w\d-:]*\\)([\w\d-:]*)(?=\.[\.\w\d-:]*)
仅捕获整个文件路径中的任何类型的文件名。故意排除文件路径和文件扩展名
等等:
C:\Log\test\bin\fee105d1-5008-410c-be39-883e5e40a33d.pdf