1.ABAB型
ABAB替换成AB
adodoy->adoy
aoyoyhf->aoyhf
ABAB替换成ABABAB
adodoy->adododoy
aoyoyhf->aoyoyoyhf
2.ABB型
ABB型替换成BBA
wlook->wllok
dlaay->dllay
3.ABA型
ABA型替换成BAB
where->whrer
orogeny->rorgeny
非常感谢您的关注
![:em06 :em06](./images/smilies/em06.gif)
代码: 全选
$ echo adodoy|sed -r 's/(..)\1/\1/'
adoy
代码: 全选
echo adodoy|sed -r 's/(..)\1/\1\1\1/'
代码: 全选
echo wlook|sed -r 's/(.)(.)\2/\1\1\2/'
wllok
HuntXu 写了:试了一下,至少sed里面的正则是可以这么做的,其他地方的正则应该类似,更不用说python什么的
1. 找重复出现的ABAB可以用(..)\1来搜到,比如说
1) ABAB变AB2) ABAB变ABABAB代码: 全选
$ echo adodoy|sed -r 's/(..)\1/\1/' adoy
2. 找ABB可以用(.)(.)\2代码: 全选
echo adodoy|sed -r 's/(..)\1/\1\1\1/'
1) ABB变AAB,你的要求是说ABB变BBA,可是给出的例子却不同,不过反正差不多,调整一下替换内容的顺序即可第三个不回答了,反正和第二个差不多,自己想去,不要那么容易做伸手党代码: 全选
echo wlook|sed -r 's/(.)(.)\2/\1\1\2/' wllok
另外有个要说清楚的地方,正则只管匹配/搜索,至于替换那是各家编辑器的事情(或者各种脚本程序),只不过通常后者都提供了将前者匹配到的某些部分记录下来并且应用在替换过程中的功能而已,如上文sed中的s///是替换,\1、\2是在sed的替换命令中表示前面正则搜索中的子表达式