如何在Powershell正则表达式的匹配结果中评估数学表达式?



我有一个关于正则表达式的问题。我想知道是否有可能在powershell中评估正则表达式的匹配结果上的数学表达式?我不能用powershell来求值,只能用正则表达式。

问题陈述:

我有一个类似下面的代码:

$id = $reader.GetValue(0).ToString();
$col1 = $reader.GetValue(1).ToString();
$col2 = $reader.GetValue(2).ToString();
$col3 = $reader.GetValue(3).ToString();
$col4 = $reader.GetValue(4).ToString();
$col5 = $reader.GetValue(5).ToString();
$col6 = $reader.GetValue(6).ToString();
$col7 = $reader.GetValue(7).ToString();
...

我需要增加3个索引0,1,2等在GetValue()文本与查找&替换Powershell ISE对话框。

结果应该是这样的:

$id = $reader.GetValue(3).ToString();
$col1 = $reader.GetValue(4).ToString();
$col2 = $reader.GetValue(5).ToString();
$col3 = $reader.GetValue(6).ToString();
$col4 = $reader.GetValue(7).ToString();
$col5 = $reader.GetValue(8).ToString();
$col6 = $reader.GetValue(9).ToString();
$col7 = $reader.GetValue(10).ToString();
...

I was try

Find what: GetValue((d))
Replace with: GetValue($1+3)

但是我没有成功,我找不到任何关于这个问题的文件或合理的解决方案。

事先非常感谢任何可能的解决方案。

可以使用

PS> $s = '$col1 = $reader.GetValue(1).ToString();'
PS> $rx = [regex]'(?<=GetValue()d+(?=))'
PS> $rx.Replace($s, { param($m) [int]$m.Value + 1 })
$col1 = $reader.GetValue(2).ToString();

细节:

  • 正则表达式模式在这里被编译为一个正则表达式对象
  • 模式被重写为只消耗一个或多个数字,其余部分被包装为非消耗的查找((?<=GetValue()是正向向后查找,(?=))是正向正向向前查找),以便进一步的匹配操作可以更简单
  • 使用带匹配求值器的Regex.Replace方法,{ param($m) [int]$m.Value + 1 }部分取匹配值(d+匹配的),将字符串转换为整数值,加上1,并将结果放回,而不是消耗的数字。

参见regex演示。细节:

  • (?<=GetValue()-在当前位置的左侧,必须有GetValue(文本
  • d+-一个或多个数字
  • (?=))-在当前位置的右边,必须有一个)字符。

相关内容

  • 没有找到相关文章

最新更新