$() 从字符串中删除

问题描述

我想用新的验证替换旧的验证。但是新的验证正则表达式正在从正则表达式中删除 $()

$oldValidation="<RegexPattern>^[\da-zA-Z\s+()\-']+$</RegexPattern>"
$newValidation= "<RegexPattern>^[\w\s,.;+&'""!?$()@%]*$</RegexPattern>"
$_.Fields["Parameters"].value -replace $oldValidation,$newValidation   

但是 newValidation 正在从正则表达式中删除 $() 并像这样显示

<RegexPattern>^[\w\s,.;+&'"!?@%]*$</RegexPattern>

解决方法

这可以帮助:

$oldValidation="<RegexPattern>^[\da-zA-Z\s+()\-']+$</RegexPattern>"
$newValidation= "<RegexPattern>^[\w\s,.;+&'""!?`$()@%]*$</RegexPattern>"
$_.Fields["Parameters"].value -replace [regex]::escape($oldValidation),$newValidation.Replace('$','$$')

请检查 $ 前是否有反引号。

另一种可能的解决方案是在 .Replace 中使用反引号后使用 $newValidation

$_.Fields["Parameters"].value.Replace($oldValidation,$newValidation)
,

根据https://regex101.com$ 表示正则表达式中的行尾。 () 用于捕获组。您必须反斜杠才能按字面意思使用它们。