我正在尝试实现一个正则表达式,给定一个字符串,它检查至少3个相同字符的序列,并将其替换为该字符中的两个.例如,我想转下面的字符串:
sstttttrrrrrrriing
Run Code Online (Sandbox Code Playgroud)
成
ssttrriing
Run Code Online (Sandbox Code Playgroud)
我在考虑......
$string =~ s/(\D{3,})/substr($1, 0, 2)/e;
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为:
谁能帮我?
TLP*_*TLP 12
您可以使用捕获组并对其进行反向引用\1,然后将其插入两次.
$ perl -plwe 's/(.)\1{2,}/$1$1/g'
sstttttrrrrrrriing
ssttrriing
Run Code Online (Sandbox Code Playgroud)
或者您可以使用\K(保持)转义序列以避免重新插入.
s/(.)\1\K\1+//g
Run Code Online (Sandbox Code Playgroud)
.如果需要,将通配符替换为任何合适的字符(类).例如对于字母:
perl -plwe 's/(\pL)\1\K\1+//g'
Run Code Online (Sandbox Code Playgroud)