如何在两个比赛之间插入模式?

时间:2019-01-15 03:14:21

标签: python regex

这是我的字符串

string = '03/25/93 Total time of visit (in minutes)'

我要匹配'03 / 25/93'并将其替换为'03 / 25/1993'。目前我正在尝试

re.sub(r'(\d?\d/\d?\d/)(\d\d)', r'\119\2', string)

但是很显然,'\ 1'和'\ 2'之间的'19'会引起一些错误。有没有办法修改此方法?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您需要使用语法\g<group>

代码

import re

string = '03/25/93 Total time of visit (in minutes)'
res = re.sub(r'(\d?\d/\d?\d/)(\d\d)', r'\g<1>19\2', string)

print(res)

输出

'03/25/1993 Total time of visit (in minutes)'
  

来自文档

     

在字符串类型的repl参数中,除了上述的字符转义和向后引用之外,\ g还将使用与(name)组匹配的子字符串,该组由(?P ...)语法定义。 \ g使用​​相应的组号;因此,\ g <2>等效于\ 2,但在诸如\ g <2> 0之类的替换中并没有歧义。 \ 20将被解释为对组20的引用,而不是对组2的引用,后跟文字字符“ 0”。向后引用\ g <0>替换与RE匹配的整个子字符串

看看re.sub的{​​{3}},以便更好地理解