鱼C论坛

 找回密码
 立即注册
查看: 2662|回复: 11

[已解决]请问有人知道这段代码中这个\g<0>有什么意义吗?

[复制链接]
发表于 2020-7-8 23:33:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import re
string = "in row 100 next  to the rowdy guy"
rowWordRegex = re.compile(r"\brow\b")
print(rowWordRegex.sub(r"<span class = \"hi\">\g<0></span>",string))
最佳答案
2020-7-9 09:44:12
\g<0>肯定不会是没意义的,反而在你代码中意义非常大!!!

re.sub(pattern, repl, string, count=0, flags=0)
参数:

pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags : 编译时用的匹配模式,数字形式。
前三个为必选参数,后两个为可选参数。


那这里的pattern就是rowWordRegex = re.compile(r"\brow\b"),
repl就是r"<span class = \"hi\">\g<0></span>"
string就是string也就是"in row 100 next  to the rowdy guy"

ok,先把上面这层关系缕清,诶...正则好头大~~~

接下来,我们看这句【r"\brow\b"】的含义,\b:表示字母数字与非字母数字的边界,非字母数字与字母数字的边界,如果这是你用search来看下的话,
re.search(rowWordRegex,string)返回的就是:<re.Match object; span=(3, 6), match='row'>,rowWordRegex 其实也就是将string分为

然后,我们看最后的sub,意思就是以string 的row之前为开头,in和row之间替换为\g<0>之前的,\g<0>就是row,\g<0>之后的就是string row之后的,相当于用row作分割然后替换;

举个例子:
print(rowWordRegex.sub(r'我会在in和row之间 \g<0> 我会在row和100之间',string))

返回的结果:
in 我会在in和row之间 row 我会在row和100之间 100 next  to the rowdy guy

好了,不知道你明白没,我头大了,正则...好恶心...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-9 09:00:00 | 显示全部楼层
没啥意义 就是单纯的匹配喽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 09:04:54 | 显示全部楼层
本帖最后由 小甲鱼的铁粉 于 2020-7-9 09:18 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-9 09:12:32 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-7-9 09:04
就是正则表达式中要匹配的元素中一个字符,可能网页的代码中有这个\g,所以这个\g其实没有什么特殊的含义

正则表达式里\g竟然成了没意义的东西?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 09:19:18 | 显示全部楼层
yhhpf 发表于 2020-7-9 09:12
正则表达式里\g竟然成了没意义的东西?

我还是不乱说了,编辑了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-9 09:40:42 | 显示全部楼层
yhhpf 发表于 2020-7-9 09:12
正则表达式里\g竟然成了没意义的东西?

所以这是啥意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 09:44:12 | 显示全部楼层    本楼为最佳答案   
\g<0>肯定不会是没意义的,反而在你代码中意义非常大!!!

re.sub(pattern, repl, string, count=0, flags=0)
参数:

pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags : 编译时用的匹配模式,数字形式。
前三个为必选参数,后两个为可选参数。


那这里的pattern就是rowWordRegex = re.compile(r"\brow\b"),
repl就是r"<span class = \"hi\">\g<0></span>"
string就是string也就是"in row 100 next  to the rowdy guy"

ok,先把上面这层关系缕清,诶...正则好头大~~~

接下来,我们看这句【r"\brow\b"】的含义,\b:表示字母数字与非字母数字的边界,非字母数字与字母数字的边界,如果这是你用search来看下的话,
re.search(rowWordRegex,string)返回的就是:<re.Match object; span=(3, 6), match='row'>,rowWordRegex 其实也就是将string分为

然后,我们看最后的sub,意思就是以string 的row之前为开头,in和row之间替换为\g<0>之前的,\g<0>就是row,\g<0>之后的就是string row之后的,相当于用row作分割然后替换;

举个例子:
print(rowWordRegex.sub(r'我会在in和row之间 \g<0> 我会在row和100之间',string))

返回的结果:
in 我会在in和row之间 row 我会在row和100之间 100 next  to the rowdy guy

好了,不知道你明白没,我头大了,正则...好恶心...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-9 09:48:57 | 显示全部楼层
忘记说了,其实\g<0> 相当于把pattern 作为一整个组进行引用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-9 20:56:35 | 显示全部楼层
yhhpf 发表于 2020-7-9 09:48
忘记说了,其实\g 相当于把pattern 作为一整个组进行引用

我简单理解 其实就是/g<0>  把patter对象匹配到字符串的内容当成一个组  然后直接把组的内容复制出来对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 08:37:32 | 显示全部楼层
shabum 发表于 2020-7-9 20:56
我简单理解 其实就是/g  把patter对象匹配到字符串的内容当成一个组  然后直接把组的内容复制出来对吗?{ ...

嗯,可以这么理解,\g<0>后面的0是可以变的,你案例中的这个只有一个元素所以只能是0,当返回多个元素时,可以根据需要修改为对应索引;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-10 12:43:55 | 显示全部楼层
yhhpf 发表于 2020-7-10 08:37
嗯,可以这么理解,\g后面的0是可以变的,你案例中的这个只有一个元素所以只能是0,当返回多个元素时,可 ...

ok 谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-10 13:05:50 | 显示全部楼层

记得给个最佳哦~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 12:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表