请问有人知道这段代码中这个\g<0>有什么意义吗?
import restring = "in row 100 nextto the rowdy guy"
rowWordRegex = re.compile(r"\brow\b")
print(rowWordRegex.sub(r"<span class = \"hi\">\g<0></span>",string)){:10_266:} 没啥意义 就是单纯的匹配喽
本帖最后由 小甲鱼的铁粉 于 2020-7-9 09:18 编辑
。 小甲鱼的铁粉 发表于 2020-7-9 09:04
就是正则表达式中要匹配的元素中一个字符,可能网页的代码中有这个\g,所以这个\g其实没有什么特殊的含义
正则表达式里\g竟然成了没意义的东西?{:10_266:} yhhpf 发表于 2020-7-9 09:12
正则表达式里\g竟然成了没意义的东西?
我还是不乱说了,编辑了 yhhpf 发表于 2020-7-9 09:12
正则表达式里\g竟然成了没意义的东西?
{:10_284:}所以这是啥意思 \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 nextto the rowdy guy"
ok,先把上面这层关系缕清,诶...正则好头大~~~{:10_254:}
接下来,我们看这句【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 nextto the rowdy guy
好了,不知道你明白没,我头大了,正则...好恶心...{:10_266:} 忘记说了,其实\g<0> 相当于把pattern 作为一整个组进行引用 yhhpf 发表于 2020-7-9 09:48
忘记说了,其实\g 相当于把pattern 作为一整个组进行引用
我简单理解 其实就是/g<0>把patter对象匹配到字符串的内容当成一个组然后直接把组的内容复制出来对吗?{:10_285:} shabum 发表于 2020-7-9 20:56
我简单理解 其实就是/g把patter对象匹配到字符串的内容当成一个组然后直接把组的内容复制出来对吗?{ ...
嗯,可以这么理解,\g<0>后面的0是可以变的,你案例中的这个只有一个元素所以只能是0,当返回多个元素时,可以根据需要修改为对应索引; yhhpf 发表于 2020-7-10 08:37
嗯,可以这么理解,\g后面的0是可以变的,你案例中的这个只有一个元素所以只能是0,当返回多个元素时,可 ...
ok 谢谢啦 shabum 发表于 2020-7-10 12:43
ok 谢谢啦
记得给个最佳哦~~~
页:
[1]