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

时间:2010-11-08 14:54:39

标签: c# .net regex

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

我正试图围绕像*.*.**.这样的事情。我目前的问题是,*.通常需要匹配以点结尾或根本没有点的文件。
我将*.翻译成^.+[^\.].*$,但这显然是错误的。它不仅匹配blahblah.,还匹配blah.blah

那么匹配blahblah.的正确的正则表达式语法是什么,而不是blah.blah

2 个答案:

答案 0 :(得分:1)

我认为以下内容对您有用

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

从字符串开头匹配任何字符但是。并且字符串可能以0或1结尾。

答案 1 :(得分:0)

我似乎无法使用点创建名称​​结束的文件,但我发现glob *.将匹配启动的名称如果名称中没有其他点,则使用点。例如,它匹配.cvspass,但不匹配.antelope.cfg。它也匹配没有点的名称。正则表达式为^\.?[^.]+$

与“等同于”的结尾将是^[^.]+\.?$,但我认为你不需要那样。如果您还需要在开始结束时匹配(但不在其他地方),则可以使用^\.?[^.]+\.?$。如果这两个条件是互斥的,请使用^(?:\.?[^.]+|[^.]+\.)$