【问题标题】:Constructing a C# RegEx for any given filename为任何给定的文件名构造 C# RegEx
【发布时间】:2013-11-28 00:23:09
【问题描述】:

对于任何有时间帮助我的 RegEx 大师的问题...我有一个应用程序允许用户指定一个文件名,该文件名用于从 ftp 或本地目录中获取文件...在文件名,他们可以使用 * 字符指定通配符...

示例包括:

file1*.txt, *.* , acb*.* , file.txt , *abc*.xml , filewithnoext*

我需要一个动态正则表达式来过滤我的文件列表并仅根据用户输入检索文件...那里有人可以帮助我吗?感谢您抽出宝贵时间查看。

【问题讨论】:

  • 是否要检索不带扩展名的文件名?
  • 是,如果没有“。”存在于用户输入文本中
  • 你能告诉我们用于检索文件的代码吗?也许用户的输入,包括通配符,可以被检索文件的函数使用......
  • This Answer 非常接近你想要的
  • 通配符本质上是正则表达式的一个子集,你可以只取它们的字符串,转义特殊字符,如.,然后用.*?替换通配符。这将匹配任何 0 次或更多次,但尽可能少

标签: c# .net regex filenames


【解决方案1】:

你可以试试这样的:

string reg = Regex.Escape(userinput).Replace(@"\*", ".*?");

然后遍历每个文件并通过执行以下操作检查它们:

foreach (string file in files)
{
    if(!Regex.Match(file + "$", reg).Success)
        continue;

    //...
}

【讨论】:

  • 输入也可以包含.,所以你也需要替换它
  • @T.Kiley 将通过Regex.Escape()转义
  • @FrancoTrombetta 它应该,. 会变成 .*?\..*? 的正则表达式匹配,但你绝对应该看看 Jonesy 对 OP 的评论,它有一个链接到这里:@ 987654321@
  • 您需要将$ 添加到正则表达式的末尾。否则“*.xml”将匹配“myfile.xml.txt”和“myfile.xmltest”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 2016-04-20
相关资源
最近更新 更多