首页 > 解决方案 > 使用记事本++中的正则表达式替换数字增加的文本

问题描述

示例字符串:

<TemperatureRange min="min3" max="max3" uom="uom13" code="1013" />
<TemperatureRange min="min4" max="max4" uom="uom13" code="1013" />

找什么 : <TemperatureRange min="min.*" max="max.*" u

用。。。来代替 : <TemperatureRange min="10" max="10" u

输出 :

<TemperatureRange min="10" max="10" uom="uom13" code="1013" />
<TemperatureRange min="10" max="10" uom="uom13" code="1013" />

预期输出:

<TemperatureRange min="10" max="10" uom="uom13" code="1013" />
<TemperatureRange min="11" max="11" uom="uom13" code="1013" />

标签: regexnotepad++

解决方案


由于您使用的是 Notepad++,我将假设您有 powershell。

随意改进这里的代码,因为它可能效率不高,但它应该可以满足您的需求。我这样做是为了让您甚至可以从最小值和最大值的不同数字开始。

function ReplaceFirstOccurrence ([string] $Source, [string]$Find, [string]$Replace)
{
    $Place = $Source.IndexOf($Find);

    $result = $Source.Remove($Place, $Find.Length).Insert($Place, $Replace);
    return $result;
}


$text = @"
<TemperatureRange min="min3" max="max3" uom="uom13" code="10131" />
<TemperatureRange min="min3" max="max3" uom="uom13" code="10132" />
<TemperatureRange min="min3" max="max3" uom="uom13" code="10133" />
<TemperatureRange min="min3" max="max3" uom="uom13" code="10134" />
"@
#alternatively, you can read text from file with Get-Content -Path c:\path\to\file.txt

$findWhat = @"
<TemperatureRange min="min.*" max="max.*" u
"@

$replaceWithTemplate = @"
<TemperatureRange min="{num1}" max="{num2}" u
"@

$startNums = @{}
$startNums["{num1}"] = 10
$startNums["{num2}"] = 10


$matches = [regex]::Matches($text, $findWhat)
$outputResult=$text

foreach ( $match in $matches){

    $replaceWith = $replaceWithTemplate 
    foreach($key in $($startNums.Keys))
    {
        $replaceWith = $replaceWith -replace $key,$startNums[$key]        
        $startNums[$key]++
    }

    $outputResult = ReplaceFirstOccurrence $outputResult $match.Value $replaceWith
}

$outputResult

结果是:

 <TemperatureRange min="10" max="10" uom="uom13" code="10131" />
 <TemperatureRange min="11" max="11" uom="uom13" code="10132" />
 <TemperatureRange min="12" max="12" uom="uom13" code="10133" />
 <TemperatureRange min="13" max="13" uom="uom13" code="10134" />

推荐阅读