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

标签 regex string powershell replace

我有一个像下面这样的字符串
“呜呜……呜呜……呜呜……呜呜。”

超过一个点的每一部分都必须用“_”替换,但它必须与替换的字符具有相同的数量。

该字符串应导致:
“bla___blup__blaaa___bla。”

请注意,最后一个点没有被替换,因为它没有“连接”其他点。

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

$string -replace '(.)\1+',("_"*'$&'.length)

有任何想法吗?

最佳答案

您可以使用 \G anchor将匹配粘合到前一个。

\.(?=\.)|\G(?!^)\.
  • \.(?=\.)如果另一个句号是 ahead,则匹配句号.
  • |\G(?!^)\.或者如果有之前的匹配(但不是开始)则替换句号

  • 替换为下划线。 See demo at regexstorm

    关于regex - 用不同的字符但相同的数量替换字符串中的多个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35272118/

    相关文章:

    c - 优化 C 中的简单字符串搜索

    arrays - Powershell阵列展平如何工作?

    ubuntu - Powershell与Mac机器上的终端相同吗?

    powershell - Powershell-将多个Get-Date命令添加到变量中

    regex - 如何使用 sed、awk 或 gawk 只打印匹配的内容?

    javascript - 第一场比赛之前一组,之后一组

    c++ - std::regex_replace:分离匹配组的访问索引

    JavaScript:提取电子邮件地址的一部分并分成几部分

    C++ : Function return String in Static Library give Error : expected '=' , ',' , ';' , 'asm' 或 '__attribute__' token 之前的 ':'

    windows - 批处理文件 - 如何读取由空格分隔的字符串的第一个标记