我想将字符串中所有匹配的字符(在本例中为f,z,x,r和s)移动到它的末尾。
例如:
chafo -> chaof
sasc -> sacs
chafof -> chaoff
我尝试了替代正则表达式:
Pattern: "/(.+)([f|z|x|r|s])+(.*)/"
Replacement: "$1$3$2"
但它只是:chafo -> chaof
,而不是chafof -> chaoff
任何人都可以帮助我吗?
更新
还有一件事,有办法改变:truwowfng -> truwowngf
我的意思是,如果r
在t
之后,或者是第二个字符,则不会被移动。
再次感谢!
答案 0 :(得分:3)
您可能需要一个非准确的量词,例如/(.+?)([fzxrs]+)(.*)/
,或指定您不想移动哪些字符:/(.[^fzxrs]*)([fzxrs]+)(.*)/
。
这会将任何想要的角色的第一次出现(除非是第一次出现)移动到最后。您的代码将最后一个移动到最后。这就是 chafof 失败的原因:它将最后的 f 移动到最后。
答案 1 :(得分:2)
尝试关注正则表达式
s/(.+?)([fzxs]|(?<!t|^.)r)(.*)/$1$3$2/g
简短说明
(.+?)
会根据需要使+
懒惰
(?<!t|^.)r)
将跳过匹配r
,其前面是t
或者是字符串中的第二个字符。
检查此操作here
<强>输入强>
chafo
sasc
chafof
truwowfng
arbcd
abcrd
<强>输出强>
chaof
sacs
chaoff
truwowngf
arbcd
abcdr