簡體   English   中英

使用Regex和PowerShell替換CSV中的多行模式?

[英]Replacing multiple row patterns in CSV with Regex and PowerShell?

我有一個Excel文件,其中包含數千行數據,這些數據是我使用各種PowerShell腳本從SharePoint服務器檢索到的。

行的內容結構非常相似:

General/Categoryname /ADMIN_XXXX_YEAR(random stuff here)/more_random_stuff_here.filetype 

問題是我需要過濾掉除ADMIN_XXXX_YEAR(randomstuffhere)部分之外的所有內容。

就正則表達式而言,我將關注以下內容:

http://www.regexper.com/#General \\%2F%28 \\ w%2B%29 \\%2F%28 \\ w%2B%29_%28 \\ d%2B%29_%28 \\ d%2B%29 \\%28%28%* 29 \\ 29%

(雖然很公平(\\w+)\\/(\\w+)_(\\d+)_(\\d+)\\((.*)\\)本身就足夠了)。

是的,我知道我的Regex-Fu並非完全一流,但是該表達通常可以滿足我的需要,因為它可以找到我需要的東西。 這里的問題主要是,根據我對StackExchange的了解和搜索,如果沒有VBA腳本,就無法將其應用於Excel。 雖然我不清楚如何執行這樣的搜索,但仍存在內部搜索和查找。 也許我不知道在PowerShell中有這樣做的方法嗎?

如果有人擁有可以幫助我的有益信息,我將不勝感激。

可以在Excel中使用以下公式來完成:

=MID(A1,FIND("ADMIN",A1),FIND("/",A1,FIND("ADMIN",A1))-FIND("ADMIN",A1))

假設應用於單元格A1。

或使用帶有/作為分隔符的“文本到列”,並刪除多余的部分。

只是為了闡明import-csv建議,您可以嘗試類似

[System.Collections.ArrayList]$output = @()
$csv = import-csv yourCSVfile.csv
foreach ($row in $csv) {
  $string = select columnName
  $parts = $string -split "/"
  $output.add($parts[2])
}
$output

...假設您的字符串,

常規/類別名稱/ ADMIN_XXXX_YEAR(此處為隨機內容)/more_random_stuff_here.filetype

是csv中的一列,而您的部分始終遵循第二個斜線。 如果您使用斜線分隔csv中的列,則可以執行$output.add($string)並跳過$parts內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM