用不同的字符替换字符串中的多个点但数量相同

Pat*_*ric 5 regex string powershell replace

我有一个像下面的字符串"blaa ... blup..blaaa ... bla."

必须用"_"替换每个具有多个点的部分,但它必须与替换的字符具有相同的数量.

该字符串应该导致:"bla___blup__blaaa___bla".

请注意,最后一个点未被替换,因为它没有其他点"已连接".

我尝试在powershell中使用以下正则表达式方法,但无论是否有3个或更多点,我总是得到匹配的第2个:

$string -replace '(.)\1+',("_"*'$&'.length)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

bob*_*ble 9

您可以使用\ G锚点将匹配粘贴到上一个.

\.(?=\.)|\G(?!^)\.
Run Code Online (Sandbox Code Playgroud)
  • \.(?=\.)如果另一个人领先,则匹配一个时期.
  • |\G(?!^)\. 如果之前有匹配(但没有开始),则替换句点

替换为下划线.请参阅regexstorm上的演示