2017-05-31 70 views
1

我試圖從類似下面一行使用PowerShell提取鏈接文本。使用Powershell提取錨標記鏈接文本

<a href="javascript:showPopupWindow('catdesc.jsp?catnum=20')">Entertainment</a>, <a href="javascript:showPopupWindow('catdesc.jsp?catnum=5')">Intimate Apparel/Swimsuit</a>, and <a href="javascript:showPopupWindow('catdesc.jsp?catnum=92')">Suspicious</a> 

我試過以下,但它只是匹配的第一個結果,幷包括><我不想要的。我確定這是正則表達式的一個問題,但我不太清楚它是否足夠了解哪些是錯誤的。注意上面的字符串是$result.categorization

$result.categorization -match '(\>(.*?)\<)' 

這將返回

Name,Value 
2,Entertainment                    
1,>Entertainment< 
0,>Entertainment< 

我想回到

Name,Value 
2,Suspicious                    
1,Intimate Apparel/Swimsuit 
0,Entertainment 

我也試過正則表達式上市Regular expression to extract link text from anchor tag,但不匹配任何東西。

回答

1

我不知道在哪裏輸出頭和數字從何而來,但在這裏是完全按照規定提取從單行輸入鏈接文本的解決方案:

$str = @' 
<a href="javascript:showPopupWindow('catdesc.jsp?catnum=20')">Entertainment</a>, <a href="javascript:showPopupWindow('catdesc.jsp?catnum=5')">Intimate Apparel/Swimsuit</a>, and <a href="javascript:showPopupWindow('catdesc.jsp?catnum=92')">Suspicious</a> 
'@ 

$str -split ', and |, ' -replace '.*?>([^<]*).*', '$1' 
  • $str -split ', and |, '將輸入行分成單獨的元素。

  • -replace然後操作每個單獨的<a>元件上:

    • '.*?>([^<]*).*'的整個線相匹配,但僅捕獲在所述一個和僅捕獲組,(...)鏈接文本。
    • 替換文本$1然後用捕獲組所匹配的內容替換整個行,即僅實際返回鏈接文本。

至於你嘗試過什麼:

-match從未提取其輸入部分 - 它返回一個布爾指示是否找到匹配與 LHS ,或者與陣列作爲LHS匹配項目的過濾子陣列。

也就是說,自動$Matches變量確實包含有關哪些部件匹配的信息,但僅與標量 LHS有關。

'(\>(.*?)\<)'包含兩個與文字>相匹配的嵌套捕獲組,後面跟着任意數量的字符(非貪婪地匹配),然後是文字<
這是捕獲鏈接文本的捕獲組。 不過:

  • 沒有必要爲捕獲組。
  • >< do 不是需要\ - 在正則表達式中進行轉義(儘管它沒有任何傷害)。
+0

@YEMyslf:很高興聽到它;我的榮幸。 – mklement0