1

我想将字符串中的所有匹配字符(在本例中为 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或者是第二个字符,它将不会被移动。

再次感谢!

4

2 回答 2

3

您可能需要一个不可用的量词,例如/(.+?)([fzxrs]+)(.*)/, 或指定您不想移动的字符:/(.[^fzxrs]*)([fzxrs]+)(.*)/.

这会将任何想要的角色的第一次出现(除非在第一个位置)移动到最后。您的代码会将最后一个移到最后。这就是chafof失败的原因:它将最后一个f移动到末尾。

于 2013-09-15T06:11:00.490 回答
2

尝试以下正则表达式

s/(.+?)([fzxs]|(?<!t|^.)r)(.*)/$1$3$2/g

简短的介绍

(.+?)+根据需要变得懒惰

(?<!t|^.)r)将跳过字符串r中前面t或第二个字符的匹配。

在此处检查此操作

输入

chafo
sasc
chafof
truwowfng
arbcd
abcrd

输出

chaof
sacs
chaoff
truwowngf
arbcd
abcdr
于 2013-09-28T10:40:10.073 回答