你好,我有一个脚本试图从 html 文件中提取价格值。当我在脚本中分配正则表达式时,它起作用了,但是当我将正则表达式放入 CSV 中时,它拒绝给我结果。有人能帮忙吗?
$htmlcontent = Get-Content ".\Temp.html" -Raw
$priceregex = "(?<=<span class=""a-offscreen"">\$)[\d\.]+"
Write-Host "Regex value is: " $priceregex
IF ($htmlcontent -match $priceregex){$Matches[0]}else{"Not found"}
$csvdata=Import-Csv .\WebMonitor-A.csv
$priceregex=$csvdata[0].Regex
Write-Host "Regex from CSV file is: " $priceregex
IF ($htmlcontent -match $priceregex){$Matches[0]}else{"Not found"}
html文件内容如下:
<div class="a-section a-spacing-micro"> <span class="a-price aok-align-center" data-a-size="xl" data-a-color="base"><span class="a-offscreen">$10.95</span><span aria-hidden="true"><span class="a-price-symbol">$</span><span class="a-price-whole">10<span class="a-price-decimal">.</span></span><span class="a-price-fraction">95</span></span></span>
我在 CSV 文件中将其作为一列(正则表达式):
(?<=<span class=""a-offscreen"">\$)[\d\.]+
答案1
问题 :
当您在脚本中提供 RegEx 时,某些字符(如引号)必须转义。因此,您提供的内容有效。
当您在文本文件(例如 CSV)中提供 RegEx 时,这些字符无需转义。
您仍在转义这些字符,因此不会匹配。
解决方案 :
在 CSV 文本文件中,给出以下 RegEx:
(?<=<span class="a-offscreen">\$)[\d\.]+
此处,引号(类名周围)不能转义。
那可行。