给出以下字符串:
'<p><a href="china">China</a><br><a href="india">India</a><br><a
href="korea">Korea</a><br><a href="malaysia">Malaysia</a><br><a
href="thailand">Thailand</a></p>'
我想使用Powershell来提取其中列出的所有国家/地区。换句话说,我想回归@(中国,印度,韩国,马来西亚,泰国)。
尝试使用正则表达式但无法找到正确的模式,例如:
'<p><a href="china">China</a><br><a href="india">India</a><br><a href="korea">Korea</a><br><a href="malaysia">Malaysia</a><br><a href="thailand">Thailand</a></p>' -match '(<a href="[A-Z a-z]*">[A-Z a-z]*</a>)+'
$matches
返回:
Name Value
---- -----
1 <a href="china">China</a>
0 <a href="china">China</a>
有什么建议吗?正则表达式是正确的方法吗?
P.S。请注意,该代码段格式不正确,因此我无法简单地将其转换为XML。
答案 0 :(得分:2)
$Matches
自动变量包含有关上次-match
操作的匹配捕获组的信息,而不包含有关匹配的信息。如果您想获得多个模式匹配,那么您必须使用Matches
类中的[Regex]
方法:
$InputString='<p><a href="china">China</a><br><a href="india">India</a><br><a href="korea">Korea</a><br><a href="malaysia">Malaysia</a><br><a href="thailand">Thailand</a></p>'
$Pattern='<a href="[A-Z a-z]*">([A-Z a-z]*)</a>'
$Countries=[Regex]::Matches($InputString,$Pattern)|ForEach-Object {$_.Groups[1].Value}
$Countries
虽然对于解析HTML,最好使用other answer建议的一些HTML解析器。
答案 1 :(得分:0)
以下正则表达式应该可以解决这个问题:
(?<=><a\shref="\w+">)\w+
ML
答案 2 :(得分:0)
正则表达式永远不是处理HTML的好方法(尽管它们通常很诱人)。您可以解析HTML并提取所需的数据,而无需使用任何正则表达式:
PS C:\> $d = '<p><a href="china">China</a><br><a href="india">India</a><br><a
href="korea">Korea</a><br><a href="malaysia">Malaysia</a><br><a
href="thailand">Thailand</a></p>'
PS C:\> $html = New-Object -ComObject "HTMLFile"
PS C:\> $html.IHTMLDocument2_write($d)
PS C:\> $html.getElementsByTagName('A') | select -expandProperty innerText
China
India
Korea
Malaysia
Thailand
答案 3 :(得分:0)
$InputString='<p><a href="china">China</a><br><a href="india">India</a><br><a href="korea">Korea</a><br><a href="malaysia">Malaysia</a><br><a href="thailand">Thailand</a></p>'
$Pattern='(?<=>)\w+?(?=<)'
([Regex]::Matches($InputString,$Pattern)).Value
中国
印度
韩国
马来西亚
泰