2017-05-31 24 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> 

私は次のことを試してみたが、それは唯一の最初の結果をマッチングだと私はしたくない><を含めています。私はそれがRegexの問題だと確信していますが、何が間違っているかを十分に知ることはできません。上記の文字列は、これは私が、私はまた、正規表現がRegular expression to extract link text from anchor tagを記載されているが、それが何にも一致しませんでした試みた

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

を返すようにしたい

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

を返し$result.categorization

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

であることに注意してください。

答えて

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 |, '入力行を個別の<a>要素に分割します。その後、

  • -replace個別<a>要素に動作します。

    • '.*?>([^<]*).*'全体ラインと一致しますが、唯一のキャプチャグループ、(...)で唯一のリンクテキストをキャプチャします。
    • 置換テキスト$1は、キャプチャグループが一致したもの、つまり効果的にリンクテキストのみを返す行全体を置き換えます。あなたが試したもののためとして

-matchは、その入力の一部を抽出したことがない - それは試合がスカラ LHSで発見されたかどうかを示すブールを返します。 、または配列をLHSとして持つ一致する項目のフィルタリングされたサブアレイ。

つまり、自動$Matches変数には一致する部分に関する情報が含まれていますが、スカラー LHSのみが含まれています。

'(\>(.*?)\<)'には、リテラル>と一致する2つのネストされたキャプチャグループが含まれ、任意の数の文字(非貪欲に一致する)が続き、その後にはリテラル<が続きます。
リンクテキストをキャプチャするのは内部キャプチャグループです。 しかし:

  • キャプチャグループのための必要はありません。
  • ><は正規表現で - エスケーピングない必要\を行う(それは問題はありませんが)。
+0

@YEMyslf:嬉しいです。どういたしまして。 – mklement0

関連する問題