我正在尝试使用-replace
语句在PowerShell中进行条件替换。
下面是我的可复制示例:
$content = @'
a<a
a>a
a'a
a"e;a
a&a
johnson&johnson
J&J
R&D
P&AB
M&ABC
O&ABCD
B&SS-IHC
S&B
GC&E
M&G
P&D
'@
我想用&
替换所有的&
,但如果字符串以;
结束,则不要替换。结果是:
a<a
a>a
a'a
a"e;a
johnson&johnson
J&J
R&D
P&AB
M&ABC
O&ABCD
B&SS-IHC
S&B
GC&E
M&G
P&D
到目前为止,我只能想出$modifiedContent = $content -replace '(w)&(w*)[^;]|$' , '$1&$2'
而我却一无所获。我怎样才能正确地添加一个条件来完成任务?
提前谢谢。
您可以使用
b&b(?!w+;)
更换为&
。请参阅regex演示。
详细信息
b
-当前位置左侧需要一个单词char&
-一个&
字符b
-当前位置右侧需要一个单词字符(?!w+;)
-紧挨着右边,不应该有1个以上的单词字符和一个;
您还可以指定不想匹配的内容,因为您似乎想排除某些特殊实体。
使用带交替的否定前瞻来断言右边不是任何列出的备选方案,后面跟着;
,并替换为&
&(?!(?:lt|gt|amp|quote|apos);)
解释
&
完全匹配(?!
负面前瞻(?:lt|gt|amp|quote|apos);
匹配后面跟有;
的任何列出的
)
关闭前瞻
Regex演示
([regex]"(S*)(&)(?!S*;)(S*)").Replace($content, '$1&$3')