令人惊讶的是,

import re
s = "a=2323.232323 b=23.23 c=112  d=12"
pattern = r'a=([-+]?(\d*[.])?\d+) b=([-+]?(\d*[.])?\d+) c=([-+]?(\d*[.])?\d+)'
tobereplacedwith = r'thisisb=\2 thisisa=\1 thisisc=\3'
print re.sub(pattern, tobereplacedwith, s)


thisisb=2323. thisisa=2323.232323 thisisc=23.23  d=12

为什么不产生
thisisb=23.23 thisisa=2323.232323 thisisc=112  d=12

最佳答案

从perlretut:


  如果正则表达式中的分组是嵌套的,则$ 1将使用
  最左边的左括号,$ 2下一个左括号,等等。


资料来源:http://perldoc.perl.org/perlretut.html

Python的regex引擎基于Perl的引擎,因此其行为类似。

所以:

a=(([-+]?(\d*[.])?\d+)外部捕获组,即2323.232323 ==组1

a=(([-+]?(\d*[.])?\d+)内部捕获组,即(\d*[.])2323. ==组2

b=([-+]?(\d*[.])?\d+)外部捕获组,即23.23 ==组3

要获得所需的输出,请尝试以下操作:

import re
s = "a=2323.232323 b=23.23 c=112  d=12"
pattern = r'a=([-+]?(\d*[.])?\d+) b=([-+]?(\d*[.])?\d+) c=([-+]?(\d*)([.]\d*)?)'
tobereplacedwith = r'thisisb=\3 thisisa=\1 thisisc=\6'
print re.sub(pattern, tobereplacedwith, s)


输出:

thisisb=23.23 thisisa=2323.232323 thisisc=112  d=12

09-19 21:09