今天只想简单的写10行代码,尝试正则表达式中的子串功能,没想到踩了python的一个小坑:
import re
s = "https://blog.csdn.net/weixin_44981444/article/details/108477207"
pat = r'/(w.*4)/'
result = re.findall(pat,s)
print(result)
tt=re.search(pat,s)
print(tt.group())
输出结果:
['weixin_44981444']
/weixin_44981444/
上面的两种方法匹配的结果不一致。 网上搜了好久的答案,原来是因为group()函数是带参数的,默认为0,匹配的是正则表达式整体的结果。group(1) 会列出第一个括号里面的结果,group(2)会列出第二个括号里的结果。所以这个例子,要想达到同样的效果,需要用group(1)。
print(tt.group(1))
输出结果:
weixin_44981444
总结:
re.findall会默认把括号当作分组,还re.search默认不把括号当分组,这就造成了他们之间的一点差别。平常使用时需要注意。