Python工作笔记003---正则中的re.I re.M_以及m.group和m.groups的解释

    JAVA技术交流QQ群:170933152    

正则表达式中的re.M表示将字符串视为多行,从而^匹配每一行的行首,$匹配每一行的行尾

我给你个Python语言的例子,你看看吧

这个程序是匹配冒号加一个空格后的数字串,中间有换行符\n所以用多行匹配re.M

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#!/usr/bin/python3

  

import re

  

line = "IF_MIB::=Counter32: 12345\nIF_MIB::=Counter32: 1234556";

result = re.findall( r'(?<=\:\s)\d+$', line, re.M)

  

if result:

     print (result)

else:

     print ("Nothing found!!")

运行结果

['12345''1234556']

re.I 忽略大小写

>>> re.match(r"A","abc",re.I)

<_sre.SRE_Match object at 0x0000000001F1A510>

re.M,将所有行的尾字母输出 multiple

>>> a="123abc456"
>>> import re
>>> 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
>>> print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).group())
123abc456
>>> print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups())
('123', 'abc', '456')
>>> print(re.search("([0-9])*([a-z])*([0-9]*)", a).groups())
('3', 'c', '456')
>>> print(re.search("([0-9])*([a-z])*([0-9]*)", a).groups(1))
('3', 'c', '456')
>>> print(re.search("([0-9])*([a-z])*([0-9]*)", a).group(0))
123abc456
>>> print(re.search("([0-9])*([a-z])*([0-9]*)", a).group())
123abc456 

究其因:

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

  •  m.group() == m.group(0) == 所有匹配的字符(即匹配正则表达式整体结果)
  •  group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
  • m.groups() 返回所有括号匹配的字符,以tuple格式。m.groups() == (m.group(0), m.group(1), ...)

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

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

猜你喜欢

转载自blog.csdn.net/lidew521/article/details/86651299