【问题标题】:Detect file path from a given string contains special chars从给定字符串中检测文件路径是否包含特殊字符
【发布时间】:2018-04-23 12:13:47
【问题描述】:

我的代码收集了许多文件路径。文件路径通常包含一些特殊字符(前缀或后缀)。我想派生一个正则表达式,以使用 C# 从任意数量的特殊字符或任何字符(它应该完全从驱动器号开始并以文件扩展名结尾)中检测和提取给定字符串的文件路径。

例如

//如果路径包含如下内容

string filPath = "\\??\\C:\\Windows\System32\\appidcertstorecheck.exe\\%%";

那么它应该返回...

filPath = "C:\\Windows\System32\\appidcertstorecheck.exe";

请帮帮我!

【问题讨论】:

  • 你尝试过什么工作?没有你的工作,这将被关闭。

标签: c# regex string filepath


【解决方案1】:

也许这会有所帮助\w:.*\.\w+

说明

  • \w匹配任何单词字符(等于[a-zA-Z0-9_]
  • : 匹配字符 : 字面意思(区分大小写)
    • .* 匹配任何字符(行终止符除外)
    • * Quantifier — 匹配 0 次到无限次,尽可能多次,根据需要回馈(贪婪)
  • \. 匹配字符 。字面意思(区分大小写)
    • \w+ 匹配任何单词字符(等于[a-zA-Z0-9_]
    • + Quantifier — 匹配一次到无限次,尽可能多次,按需回馈(贪婪)

输出

C:\\Windows\System32\\appidcert.storecheck.exe

来自

\\??\\C:\\Windows\System32\\appidcert.storecheck.exe\\%%";

Demo here

【讨论】:

  • 这两个分组似乎都没有必要
  • @TheGeneral:感谢您的帮助,是的,它运行良好。我不知道为什么这个问题被低估了。 Regex.Match(pathString.ToString(), @"\w:.*\.\w+").Groups[0].Value; 可以为我拉出确切的路径。由于我的代码用于分析文件,因此文件路径通常由特殊字符组成,我必须使用正则表达式来处理这种情况。
【解决方案2】:

您可以简单地使用 FileInfo 并将字符串传递给它的构造函数。如果它是无效的字符串(不是路径)。它会抛出 ArgumentException
或者这样的事情可能会有所帮助:

^([a-zA-Z]\:)(\\[^\\/:*?<>"|]*(?<![ ]))*(\.[a-zA-Z]{2,6})$

更新 我应该强烈提到的丁字裤是路径可以包含 Unicode,或者它可以是相对的。那么使用正则表达式可能不是一个好主意。此外,还有一些关于文件名和...的规则应该考虑在 windows 中。

【讨论】:

  • 使用异常来控制程序流程通常是个坏主意,因为它会使代码变慢。
  • @UweKeim 你是对的,如果你不考虑 Unicode。如果您考虑那么将没有其他 FileInfo (我想)
猜你喜欢
  • 2010-12-20
  • 2016-08-24
  • 2016-08-01
  • 2014-11-25
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多