繁体   English   中英

从文件路径中删除动态用户名

[英]Remove dynamic username from file path

我在C#中有以下内容。

string fileName = @"X:\Users\username\AppData\Local\foo.txt";

我想执行一个Regex.Replace以便获得以下信息。

string fileName = @"X:\Users\AppData\Local\foo.txt";

使用允许驱动器号( X: :)动态的正则表达式会很好。 本质上,我只需要删除username部分。 另外,请注意,用户名只是用户实际名称的占位符-因此可以是bob或larry或john或其他任何名称。 正则表达式将需要考虑到这一点。

您可以在这里指望的是,它总是以X:\\Users\\开头(其中X:可以是C:D:等),然后跟着一些字符串,然后跟着一个\\ ,然后是其他一些不重要的路径元素。 此外,最好在users or Users上设置不区分大小写的匹配项。

我知道无需Regex即可完成此操作,但我需要将其装入仅提供Regex支持的更大系统中。 不支持String.ReplaceString.Join类的东西。

您可以尝试以下示例:

string fileName = @"X:\Users\username\AppData\Local\foo.txt";
Console.Write(Regex.Replace(fileName, @"([A-Z]{1}\:*\\Users\\)(\w+\\)(.*)", "$1$3"));

说明:

  1. ([AZ]{1}\\:\\\\[Uu]sers\\\\) -正则表达式的这一部分是路径中username之前的第一组字符
    • ^代表行的开头(将其删除以忽略文件名前面的单词)
    • [AZ]{1}\\:\\\\代表磁盘根路径。 您可以选择要在此处的磁盘字母,例如: [CDX-Z]{1} 注意{1} -这是约束条件,意味着您仅需要1个大写字母。
    • [Uu]sers\\\\代表用户目录名,请注意不区分大小写的用户路径的组这是第一个组,在替换模式中称为$1
  2. (\\w+\\\\) -正则表达式的这一部分是路径中的第二个字符组,即username
    • \\w+\\\\代表至少一个单词字符和\\符号。 这是第二组,未处于替换模式
  3. (.*) -正则表达式的此部分是路径中username之后的第三组字符
    • .*代表删除的\\符号后的任何字符。

更新:在现实世界中,我发现用户名中包含空格,unicode字符和〜。 因此,我替换了2.组以包括除\\符号之外的任何字符。

string fileName = @"X:\Users\username\AppData\Local\foo.txt";
Console.Write(Regex.Replace(fileName, @"([A-Z]{1}\:\\[Uu]sers\\)([^\\]*\\)(.*)", "$1$3"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM