【问题标题】:translating filename wildcards to regex将文件名通配符转换为正则表达式
【发布时间】:2010-11-08 14:54:39
【问题描述】:

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

我正试图围绕*.*.**. 之类的内容展开思考。我目前的问题是 *. 通常会匹配以点结尾或根本没有点的文件。
所以我将*. 翻译成^.+[^\.].*$,但这显然是错误的。它不仅匹配blahblah.,还匹配blah.blah

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

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    我认为以下内容对你有用

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

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

    【讨论】:

    • (哦,原来我无法创建名为blah. 的文件,尝试创建文件blah。)
    【解决方案2】:

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

    “以”结尾的等价物是^[^.]+\.?$,但我认为您不需要它。如果您还需要在开始结束(但没有其他地方)进行匹配,您可以使用^\.?[^.]+\.?$。如果两个条件互斥,使用^(?:\.?[^.]+|[^.]+\.)$

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 2012-09-23
      • 2014-05-19
      • 1970-01-01
      • 2019-06-23
      • 2011-10-02
      • 2016-04-02
      相关资源
      最近更新 更多