这样的事情:
/[abcd]/[efgh]/
我们的想法是a
将替换为e
,b
替换为f
,c
替换为g
等等。< / p>
理想情况下,这应该与语言无关。如果那是不可能的,我有一个替代解决方案(因为这个正则表达式是由一些代码生成的,我可以为每个可能的替换创建一个)。
答案 0 :(得分:7)
在perl中,tr
执行字符替换:
tr/abcd/efgh/
会做你的例子所暗示的。
答案 1 :(得分:2)
在sed中,y///
表达式就是这样。
它也是perl
中tr///
的同义词
答案 2 :(得分:0)
在Python中,可以将Lambda函数传递给re.sub
>>> import re
>>> d={"a":"e","b":"f","c":"g","d":"h"}
>>> re.sub("[abcd]",lambda x:d[x.group(0)],"abcd")
'efgh'
通常情况下,将“a”映射到“e”并不是很有用。
如果想要在“x”之前将a,b,c,d更改为e,f,g,h,则更有用。它可以用一个正则表达式完成。
>>> re.sub("(?<=x)[abcd]",lambda x:d[x.group(0)],"xaxbxcxdaabbccdd")
>>>'xexfxgxhaabbccdd'
答案 3 :(得分:0)
好吧,使用Python,不应该也使用正则表达式
>>> import string
>>> FROM="abcd"
>>> TO="efgh"
>>> table=string.maketrans(FROM,TO)
>>> print "a cold day".translate(table)
e golh hey
答案 4 :(得分:0)
如果你真的想在正则表达式中做到这一点:某些语言可以将表达式作为正则表达式的右侧,所以可能类似于(Perl):
$ foo = ~s / x([a-d])/“x”.chr(ord($ 1)+4)/ e
可以做到这一点,虽然 有点可怕,但它可能不是你真正需要的。
答案 5 :(得分:0)
在PHP中,这可以通过在preg_replace
。
$outputText = preg_replace($arraySource, $arrayTarget, $inputText);
$arraySource[0] is replaced by $arrayTarget[0]
$arraySource[1] is replaced by $arrayTarget[1]
$arraySource[2] is replaced by $arrayTarget[2]
. .
. .
. .
. .
等等。
答案 6 :(得分:0)
有一个UNIX命令'tr'可以做到这一点,作为Perl和Python答案的补充......