gpt4 book ai didi

regex - Perl - 替换相同字符的序列

转载 作者:行者123 更新时间:2023-12-03 19:38:26 26 4
gpt4 key购买 nike

我正在尝试实现一个正则表达式,给定一个字符串,它检查至少 3 个相同字符的序列并将其替换为该字符中的两个。例如,我想把下面的字符串:

sstttttrrrrrrriing

进入
ssttrriing 

我在想一些事情......
$string =~ s/(\D{3,})/substr($1, 0, 2)/e;

但这行不通,因为:
  • 它不检查三个字母字符是否相同;它可以匹配三个或更多的序列 独特 人物。
  • 它只替换第一个匹配项;我需要适应此正则表达式中的所有匹配项。

  • 谁能帮我?

    最佳答案

    您可以使用捕获组并通过 \1 反向引用它,然后插入两次。

    $ perl -plwe 's/(.)\1{2,}/$1$1/g'
    sstttttrrrrrrriing
    ssttrriing

    或者您可以使用 \K (保持)转义序列以避免重新插入。
    s/(.)\1\K\1+//g

    替换通配符 .如果需要,对于任何合适的字符(类)。以字母为例:
    perl -plwe 's/(\pL)\1\K\1+//g'

    关于regex - Perl - 替换相同字符的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777738/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com