[英]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.