[英]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.Replace
或String.Join
类的东西。
您可以尝试以下示例:
string fileName = @"X:\Users\username\AppData\Local\foo.txt";
Console.Write(Regex.Replace(fileName, @"([A-Z]{1}\:*\\Users\\)(\w+\\)(.*)", "$1$3"));
说明:
([AZ]{1}\\:\\\\[Uu]sers\\\\)
-正则表达式的这一部分是路径中username
之前的第一组字符 ^
代表行的开头(将其删除以忽略文件名前面的单词) [AZ]{1}\\:\\\\
代表磁盘根路径。 您可以选择要在此处的磁盘字母,例如: [CDX-Z]{1}
。 注意{1}
-这是约束条件,意味着您仅需要1个大写字母。 [Uu]sers\\\\
代表用户目录名,请注意不区分大小写的用户路径的组这是第一个组,在替换模式中称为$1
(\\w+\\\\)
-正则表达式的这一部分是路径中的第二个字符组,即username
\\w+\\\\
代表至少一个单词字符和\\
符号。 这是第二组,未处于替换模式 (.*)
-正则表达式的此部分是路径中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.