问题描述
我想用新的验证替换旧的验证。但是新的验证正则表达式正在从正则表达式中删除 $()。
$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,$
表示正则表达式中的行尾。 ()
用于捕获组。您必须反斜杠才能按字面意思使用它们。