将文件名通配符转换为正则表达式

translating filename wildcards to regex

提问人:sbi 提问时间:11/8/2010 最后编辑:Alan Mooresbi 更新时间:11/9/2010 访问量:720

问:

我需要将任意旧的DOS通配符字符串转换为正则表达式字符串,然后与.不幸的是,我的正则表达式知识非常尴尬。System.Text.RegularExpressions.Regex

我试图把我的脑袋包在像 、 和 .我目前的问题是,通常期望匹配以点结尾或根本没有点的文件。
所以我翻译成 ,但这显然是错误的。它不仅匹配 和 ,而且 匹配 。
*.*.**.*.*.^.+[^\.].*$blahblah.blah.blah

那么匹配 和 但不匹配的正确正则表达式语法是什么?blahblah.blah.blah

C# .NET 正则表达式

评论


答:

1赞 Robb 11/8/2010 #1

我认为以下内容将为您服务

^[^.]+\.{0,1}$

从字符串的开头匹配除 .字符串可能以 0 或 1 结尾。s

评论

0赞 sbi 11/9/2010
(哦,事实证明我无法创建一个名为 的文件,尝试这样做将创建一个文件。blah.blah
0赞 Alan Moore 11/9/2010 #2

我似乎无法创建名称以点结尾的文件,但我观察到,如果名称中没有其他点,则 glob 将匹配以点开头的名称。例如,它匹配 ,但不匹配 。它还匹配完全没有点的名称。其正则表达式为 .*..cvspass.antelope.cfg^\.?[^.]+$

“ends with”等价物是 ,但我认为你不需要它。如果还需要在开始结束时匹配(但在其他任何地方没有匹配),则可以使用 .如果这两个条件互斥,请使用^[^.]+\.?$^\.?[^.]+\.?$^(?:\.?[^.]+|[^.]+\.)$