本篇文章小编给大家分享一下Python re.sub反向引用实现代码,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
re模块是 Python 标准库中提供的用于处理正则表达式的模块,利用 re模块可以方便的利用正则表达式实现字符串中的匹配、替换等操作
match 分组
Python re模块中提供了 match函数,用来匹配字符串中指定的正则表达式规则。例如,如果想匹配到 "Isaac Newton, physicist"中的 Isaac Newton,则可以使用正则表达式 w+ w+,运行结果如下:
>>> m = re.match("w+ w+", "Isaac Newton, physicist") >>> m
re.match 的第一个参数是指定的正则表达式规则,第二个参数是待匹配的字符串。正则表达式规则 w+表示匹配一段连续的字符,要求匹配到的字符数量大于 1。 w+ w+就表示匹配两段连续的字符,且两段字符中间用空格隔开
使用 match执行匹配时会对匹配到的结果进行 分组,可以通过 match返回结果的 group()接口查看分组结果
>>> m.group(0) 'Isaac Newton'
默认情况下, match只会产生一个分组,就是第 0 个分组,表示整个匹配到的内容。对于上面的例子,第 0 个分组就是 w+ w+匹配到的完整的内容,也就是 Issac Newton。
使用正则表达式中的括号 ()可以手动指定匹配的分组。例如如果想把 Issac和 Newton做为两个分组,那么可以将正则表达式改为 (w+) (w+):
>>> m = re.match("(w+) (w+)", "Isaac Newton, physicist")
在 (w+) (w+)这个正则表达式中,指定了两个分组,这两个分组匹配的内容都是 w+,并且两个分组之间用空格隔开。
使用 groups() 可以查看匹配结果中的所有分组:
>>> m.groups() ('Isaac', 'Newton')
也可以使用 group()接口分别查看每一个分组,其中 group(0)仍然表示完整的匹配结果, group(1)表示匹配结果中的第 1 个分组, group(2)表示第 2 个分组,以此类推:
>>> m.group(0) 'Isaac Newton' >>> m.group(1) 'Isaac' >>> m.group(2) 'Newton'
re.sub 匹配和替换
re.match()函数提供了正则表达式的匹配接口, re.sub()不光能匹配正则表达式,还能替换字符串中的结果,生成一个新的字符串。
例如把字符串中 (w+) (w+)匹配到的结果替换成 Albert Einstein,可以这样写:
>>> re.sub("(w+) (w+)", "Albert Einstein", "Isaac Newton, physicist") 'Albert Einstein, physicist'
re.sub 中第 1 个参数表示匹配的正则表达式,第 2 个参数表示替换表达式,第 3 个参数表示原始字符串
这里的替换表达式是手动指定的新字符串 Albert Einstein,他和原始字符串中的内容毫不相关。如果希望复用原始字符串中的内容,那么就需要用到 re.sub的反向引用功能了。
反向引用
反向引用指的是在指定替换结果的过程中,可以引用原始字符串中的匹配到内容。例如 (w+) (w+)在原始字符串中匹配到了 Isaac Newton,利用匹配到的结果,将结果改写为 FirstName: Isaac, LastName: Newton。
既然需要引用,那么就得有一个表达式能够表示匹配的内容。恰好 re.sub的匹配结果也有和 re.match一样的分组,因此只需要在替换表达式中引用分组的结果即可。引用方式有以下几种:
number:例如 1,表示匹配结果中第 1 个分组,也就是例子中的 Isaac部分。
g
回到开始的例子中,将匹配结果 Isaac Newton改写为 FirstName: Isaac, LastName: Newton ,可以用以下表达式实现:
>>> re.sub("(w+) (w+)", "FirstName: g<1>, LastName: g<2>", "Isaac Newton, physicist") 'FirstName: Isaac, LastName: Newton, physicist'
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔