我想找到OpenFileDialog
文件过滤器字符串中exentions列表中的第一个扩展名。
考虑以下示例 -
Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF
Text files (*.txt)|*.txt
对于第一种情况 - 现在如果用户尝试保存没有扩展名的文件,那么默认情况下我想将.BMP
扩展名附加到文件名。
对于第二种情况 - 现在如果用户尝试保存没有扩展名的文件,那么默认情况下我想将.txt
扩展名附加到文件名。
答案 0 :(得分:3)
您在SaveFileDialog
上有一个属性,可以将扩展名附加到无扩展名称文件,请查看MSDN Documentation。
myOpenFile.DefaultExt = ".bmp"
无论如何,你可以得到像这样的过滤器的第一个扩展:
Dim sExt As String = sFilter.Split("|"c)(1).Split(";"c)(0)
然后您需要以您希望的方式清除*
,例如:
sExt = sExt.Replace("*","")
sExt = sExt.SubString(sExt.LastIndexOf("."c))
我建议您使用第二个示例,因为即使过滤器没有*
并且具有更多特定文件名,它也会获得扩展名。
答案 1 :(得分:1)
不是使用正则表达式来分割字符串,而是使用SysDragon建议的分割函数 - 没有理由不这样做。获得原始字符串的第二部分之后,此正则表达式将从BMP
获取*.BMP;*.JPG;*.GIF
作为唯一匹配。
^\|\*\.(\w{1,4});
简单地说,这说明如下:
我随意选择了1-4个字母数字字符,但你可以调整它以满足你的需要,例如{3}
意味着'找到正好三个',[A-Za-z]{1,3}
意味着'找到至少一个和最多三个来自字母AZ和a-z'的匹配。
由于您只需要第一个扩展名,因此您可以按照自己的意愿进行操作,但您可以随时修改模式以将所有扩展名作为匹配集合。事实上,正则表达式甚至更简单(但是为什么返回 n 匹配1时会做什么?)并且我会为你做一个学习练习: - )
答案 2 :(得分:0)
我使用了两个不同的正则表达式来完成任务。我使用的第一个正则表达式是
(?<Name>[^|]*)\|(?<Extension>[^|]*)\|?
打破名称和文件的表达
Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF
分为两部分
Image Files(*.BMP;*.JPG;*.GIF)
*.BMP;*.JPG;*.GIF
然后我使用了正则表达式
\*\.(?<Name>[^;]\w*)
在第一个正则表达式组的Entension
部分,以获取更多组,例如BMP
,JPG
,GIF
,然后进行第一组匹配。我非常感谢Steve Pettifer鼓励他使用Expresso。