正则表达式可以实现吗?

时间:2009-12-18 02:47:37

标签: regex replace

这样的事情:

/[abcd]/[efgh]/

我们的想法是a将替换为eb替换为fc替换为g等等。< / p>

理想情况下,这应该与语言无关。如果那是不可能的,我有一个替代解决方案(因为这个正则表达式是由一些代码生成的,我可以为每个可能的替换创建一个)。

7 个答案:

答案 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答案的补充......