Regex 正则表达式可以这样做吗?

Regex 正则表达式可以这样做吗?,regex,replace,Regex,Replace,大概是这样的: /[abcd]/[efgh]/ 想法是a将被e取代,b被f取代,c被g取代,等等 理想情况下,这应该是独立于语言的。如果不可能,我有一个替代解决方案(因为这个正则表达式是由一些代码生成的,我可以为每个可能的替换生成一个)。在perl中,tr执行字符替换: tr/abcd/efgh/ 在sed中,y//表达式就是这样做的 它也是perl中的tr///的同义词,Python中的可以将Lambda函数传递给re.sub >>> import re >>

大概是这样的:

/[abcd]/[efgh]/
想法是
a
将被
e
取代,
b
f
取代,
c
g
取代,等等


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

在perl中,
tr
执行字符替换:

tr/abcd/efgh/

在sed中,
y//
表达式就是这样做的


它也是perl中的
tr///
的同义词,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”并不是真正有用的

当你想把a,b,c,d改成e,f,g,h,而“x”在它们之前时,它会更有用,就像下面的例子一样。它可以用一个正则表达式完成

>>> re.sub("(?<=x)[abcd]",lambda x:d[x.group(0)],"xaxbxcxdaabbccdd")
>>>'xexfxgxhaabbccdd'

>>re.sub((?好吧,对于Python,也不必使用正则表达式

>>> import string
>>> FROM="abcd"
>>> TO="efgh"
>>> table=string.maketrans(FROM,TO)
>>> print "a cold day".translate(table)
e golh hey

如果您真的想在正则表达式中执行此操作:某些语言可以将表达式作为正则表达式的右侧,因此可能类似于(Perl):

$foo=~s/x([a-d])/“x”。chr(ord($1)+4)/e


虽然有点糟糕,但这可能不是您真正需要的。在PHP中,这可以通过在
preg\u 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]

      .                              .

      .                              .

      .                              .

      .                              .

等等。

作为Perl和Python答案的补充,有一个UNIX命令'tr'可以这样做。

不,不使用“正常”regexps=pI试图给出一个比“不,这不起作用”更长的答案“。我想我会发表评论。下次你应该说你的语言是什么。如果它支持关联数组,你可以将“a”映射为“e”等。assoc[“a”]=“e”。你的意思是“寒冷的一天”变成了“e gogh hey”是的。这就是
tr
所做的。你甚至可以使用范围速记-外汇
tr/a-z/a-z/
将字符转换为大写。tr正是这样做的。问题和特征之间罕见的一对一映射。+1在[efgh]示例中添加一个大小写,可能比[abcd]更有用。或者使用
strt($str,'abcd',efgh')
(在这一特定情况下)。