如何替换字符串中每个单词的第二次出现

时间:2015-02-25 08:40:48

标签: .net regex powershell

我在PowerShell中要解决以下问题 - 如何在大字符串中替换每次出现的字符串?

示例:

ReplaceEverySecond "AAAABAAAAAABAAAABAAABAA" "B" "x"

会变成:

  

“AAAAxAAAAAABAAAAxAAABAA”

我怀疑最容易构造正则表达式并使用-replace函数,但我无法弄清楚如何构造表达式。

感谢大家的帮助。

1 个答案:

答案 0 :(得分:3)

让我们假设"BA"为要替换的字符串。然后你可以使用正则表达式

(BA(?:(?!BA).)*)BA((?:(?!BA).)*)

并替换为\1xx\2。这不仅限于文字字符串,您也可以使用正则表达式代替BA

测试live on regex101.com

<强>解释

(              # Start group 1
 BA            # Match BA (no. 1)
 (?:           # Match in non-capturing group:
  (?!BA)       # (unless it's at the start of "BA")
  .            # any character
 )*            # any number of times.
)              # End of group 1
BA             # Match BA (no. 2)
((?:(?!BA).)*) # and anything that follows until the next BA, if present.