正则表达式以及group的用法

前言:这里我只是整理了一些网上的例子,刚好能解决我的疑惑,顺便也将学习成果记录下来。


1、re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

re.match(pattern, string, flags=0)

2、re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

re.search(pattern, string, flags=0)

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

3、re.findall方法

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。再次强调是返回是列表,所以当用到findall时,一定注意是直接打印不出来的,要遍历。

findall(string[, pos[, endpos]])

参数:

  • string : 待匹配的字符串。
  • pos : 可选参数,指定字符串的起始位置,默认为 0。
  • endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
import re
 
pattern = re.compile(r'\d+')   # 查找数字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)
 
print(result1)
print(result2)

结果:
['123', '456']
['88', '12']

4、group的方法

(这部分是转载于:python group() - jihite - 博客园)

正则表达式中,group()用来提出分组截获的字符串,()用来分组

import re
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整体
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456

究其因

1. 正则表达式中的三组括号把匹配结果分成三组

  •  group() 同group(0)就是匹配正则表达式整体结果
  •  group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。

2. 没有匹配成功的,re.search()返回None

3. 当然正则表达式中没有括号,group(1)肯定不对了

4.1 match.group([group1,…])

import re

#定义了两个group,因为包含两个括号
m = re.match("(\w+) (\w+)", "Isaac Newton, physicist")

#group(0)就是匹配的整个结果
print(m.group(0))                           #输出结果为Isaac Newton

#group(1)是第一个group的值
print(m.group(1))                           #输出结果为Isaac

#group(2)是第二个group的值
print(m.group(2))                           #输出结果为Newton


#groups返回所有的group,以元组的形式
print(m.groups())                           #输出结果为('Isaac','Newton')  

4.2findall(pattern, string, flag)

import re

if __name__ == '__main__':

    #用于测试的字符串
    str = "

liuwei

zhangbin

" regex = re.compile("

(.+?)

") #定义了两个group,两个括号 res = regex.search(str) #search用于找到第一个满足匹配的子串,并返回 print("group1:%s" %res.group(1)) #输出结果为liuwei print("group2:%s" %res.group(2)) #输出结果为href='www.baidu.com' res1 = regex.findall(str) #findall输出所有满足的匹配 print("res1:%s" %res1) #输出结果 [('liuwei', " href='www.baidu.com'"), ('zhangbin', " href='www.love.com'")] print(res1[0]) #输出结果为('liuwei', 'www.baidu.com') print(res1[1]) #输出结果为('zhangbin, 'www.love.com')

参考资料:

python基础教程:Python 正则表达式 | 菜鸟教程

python group() - jihite - 博客园

python正则表达式中group_玩人的博客-CSDN博客

你可能感兴趣的:(python基础,正则表达式re,group)