从给定字符串中检测文件路径是否包含特殊字符

Detect file path from a given string contains special chars

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

示例

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

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

那么它应该 return...

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

请帮帮我!

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

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

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

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

解释

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

输出

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

来自

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

Demo here