2010-11-08 126 views
0

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

我试图围绕像*.*.**.这样的东西。我目前的问题是,*.通常需要匹配以点或以无点为结尾的文件。
所以我翻译*.^.+[^\.].*$,但这显然是错误的。它不仅匹配blahblah.,而且还匹配blah.blah

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

回答

1

我觉得下面的工作对你

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

从字符串的开始匹配任何字符,但。和字符串可以用0或1结束的。

+0

感谢您关注此问题,您的诀窍是。 – sbi 2010-11-08 16:05:09

+1

'\。{0,1}'与'\。?'相同 – Andrey 2010-11-08 16:06:10

+0

(呵呵,结果我不能创建一个名为'blah.'的文件,试图创建一个'blah'文件。) – sbi 2010-11-08 16:06:21

0

我似乎无法创建一个名称结束有一个点一个文件,但我观察到的水珠*.将匹配姓名的开始如果名称中没有其他点,则用点。例如,它匹配.cvspass,但不匹配.antelope.cfg。它也匹配没有点的名字。正则表达式将是^\.?[^.]+$

“结束”等价物将是^[^.]+\.?$,但我不认为你需要这样做。如果您还需要在开始结束时匹配(但无处可见),则可以使用^\.?[^.]+\.?$。如果这两个条件互相排斥,请使用^(?:\.?[^.]+|[^.]+\.)$