如何在PowerShell中进行条件正则表达式替换



我正在尝试使用-replace语句在PowerShell中进行条件替换。

下面是我的可复制示例:

$content = @'
a<a
a>a
a'a
a&quote;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&quote;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')

最新更新