代码之家  ›  专栏  ›  技术社区  ›  Kaptcrunch

用Regex替换文档中的HTML不起作用

  •  0
  • Kaptcrunch  · 技术社区  · 6 年前

    我的脚本正在读取一个HTML文件,逐行扫描匹配的正则表达式,以进行所需的更改。出于某种原因,当它达到第一次更改时,它不会进行更改,但通过测试,它确实会下降到 if 陈述

    下面是应更改的PowerShell脚本和文件部分。

    $sig_regex = [regex]::Escape('241')
    $sig_regex2 = [regex]::Escape('West')
    $replace_1 = "PO"
    $replace_2 = "Box 4816  Syracuse, New York  13221"
    $new_html = @()
    
    Get-Content $Path | foreach {
        $_
    
        #This is the section that should be replacing the line
        if ($_ -like $sig_regex) {
            $new_html += ($_ -replace $sig_regex, $replace_1)
        }
    
        #Replace content in line 2 of the address section (West)
        if ($_ -match $sig_regex2) {
            $new_html += ($_ -replace $sig_regex2, $replace_2)
        } else {
            #Stores any content that should not be changed into the new file
            $new_html += $_
        }
    }
    
    $new_html | Set-Content "C:\Newhtml.htm"
    

    HTML:

    <p class=MsoNormal style='line-height:150%;text-autospace:none'><span
    style='font-size:9.0pt;line-height:150%;font-family:TeXGyreAdventor color:#002C5B'>241
    West<o:p></o:p></span></p>
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   henrycarteruk    6 年前

    -Like 不是正则表达式运算符,而是“通配符”运算符(请思考 * ? )。

    您要使用 -Match 相反

        2
  •  0
  •   HeedfulCrayon    6 年前

    你可以试试这个。。。它使用。net IO类。对于这么简单的事情,我也会忘记regex。如果您正在寻找一些不时更改但仍遵循格式标准的内容,那么此时您应该使用正则表达式。

    $sig_regex = '241'
    $sig_regex2 = 'West'
    $replace_1 = "PO"
    $replace_2 = "Box 4816  Syracuse, New York  13221"
    $new_html = @()
    
    $file = [System.IO.File]::OpenText($Path)
    while (!$file.EndOfStream) {
        $text = $file.ReadLine()
        if($text -match $sig_regex){
            $new_html += ($text -replace $sig_regex, $replace_1)
        }
        elseif ($text -match $sig_regex2) {
            $new_html += ($text -replace $sig_regex2, $replace_2)
        }
        else {
            $new_html += $text
        }
    }
    
    $new_html | Set-Content "C:\Newhtml.htm"