簡體   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