python 正则表达式
python 正则表达式re 模块
分析日志,提取信息
普通字符
原字符:
. 代表任意一个字符
^ 以什么开头 ,^[abc]表示以abc开头
$ 以什么结尾
* 匹配前面的字符或表达式0次或多次 0,1,2 ……
+ 匹配前面字符或表达式至少1次 1,2,3 ……
? 匹配前面字符或表达式0次或1次 0,1
{} 里面可以是数值,{123}作为一个整体,可以匹配该整体几次
[] 匹配里面的某个字符,里面可以是个集合[0-9,a-z]
\ 转意,\$,表示就是 $
| 表示或
() 表示分组
正则表达式
\d 匹配任何十进制数,相当于
\D 匹配任何非十进制数,相当于[^0-9]
\s 匹配任何空白字符,相当于[\t\n\r\f\v]
\S 匹配任何非空白字符,相当于[^\t\n\r\f\v]
\w 匹配任何字母和数字,相当于
\W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
pattern:正则表达式,string:字符串flag:标记,默认是0,返回的是一个列表
In : import re
In : help(re.findall)
Help on function findall in module re:
findall(pattern, string, flags=0)
Return a list of all non-overlapping matches in the string.
If one or more groups are present in the pattern, return a
list of groups; this will be a list of tuples if the pattern
has more than one group.
In : import re
In : help(re.findall)
#匹配以ab开头的行,没有找到
In : re.findall(r'^ab+', 'asdabbbb')
Out: []
#匹配包含ab,b可以有多个,匹配到abbbb
In : re.findall(r'ab+', 'asdabbbb')
Out: ['abbbb']
#匹配以ab开头的字符,ab
In : re.findall(r'^ab+', 'absdabbbb')
Out: ['ab']
#匹配包含字符ab,匹配结果ab,abbbb
In : re.findall(r'ab+', 'absdabbbb')
Out: ['ab', 'abbbb']
# .表示匹配任意一个字符
In : re.findall(r".",'abc\nab\n')
Out: ['a', 'b', 'c', 'a', 'b']
# re.S表示“.”匹配任意一个字符,包括换行符
In : re.findall(r".",'abc\nab\n',re.S)
Out: ['a', 'b', 'c', '\n', 'a', 'b', '\n']
# abc$表示以abc结尾的字符
In : re.findall(r'abc$','12345abc')
Out: ['abc']
# ab*表示:b是0次或多次,匹配ab或a或abbbb 个数b>=0ab* = ab{0,} *0次或多次
In : re.findall(r'ab*','abcea')
Out: ['ab', 'a']
In : re.findall(r'ab*','abceabbbba')
Out: ['ab', 'abbbb', 'a']
# ab+表示:b是1次或多次,匹配ab或则abbbb 个数b>=1ab+ = ab{1,} +1次或多次
In : re.findall(r'ab+','abcea')
Out: ['ab']
In : re.findall(r'ab+','abceabbbb')
Out: ['ab', 'abbbb']
# ab?表示:b是0次或1次,匹配ab或则a 个数b=0或=1ab? = ab{0,1}?0次或1次
In : re.findall(r'ab?','abceabbbba')
Out: ['ab', 'ab', 'a']
# ab{0,}=ab+表示: b是0次或多次, 个数b>=0
In : re.findall(r'ab{0,}','abceabbbbcdefabbbbbbbbbbbbbbbbbbbb')
Out: ['ab', 'abbbb', 'abbbbbbbbbbbbbbbbbbbb']
# ab{0,}表示: b是0-10次, 个数b0<=b<=10
In : re.findall(r'ab{0,10}','abceabbbbcdefabbbbbbbbbbbbbbbbbbbb')
Out: ['ab', 'abbbb', 'abbbbbbbbbb']
# ab{0,}表示: b是0-1次, 个数b0<=b<=1
In : re.findall(r'ab{0,1}','abceabbbbcdefa')
Out: ['ab', 'ab', 'a']
#\d表示一个数字,匹配1,2,3,0
In : re.findall(r'[\d]','abcea1230')
Out: ['1', '2', '3', '0']
#\d表示一个字符,a-z表示任何一个小写字母,表示a-z任意一个字符
In : re.findall(r'[\da-z]','abcea')
Out: ['a', 'b', 'c', 'e', 'a']
#\d表示一个字符,表示a-z任意一个字符任意数字
In : re.findall(r'[\da-z]','abcea123')
Out: ['a', 'b', 'c', 'e', 'a', '1', '2', '3']
#\d表示一个字符,表示a-z任意一个小写字母,+表示[\da-z]是一个整体,出现一次或多次
In : re.findall(r'[\da-z]+','abcea123')
Out: ['abcea123']
#\转译字符,\$表示美元符号$,而不是以abc结尾
In : re.findall(r'abc$' , 'abc$')
Out: []
In : re.findall(r'abc\$' , 'abc$')
Out: ['abc$']
#|表示或,包含a或b
In : re.findall(r'a|b','abc')
Out: ['a', 'b']
#不包含A或B
In : re.findall(r'a|b','AB')
Out: []
#使用re.I表示忽略大小写
In : re.findall(r'a|b','AB',re.I)
Out: ['A', 'B']
#\w表示匹配任意字母或数字,返回一个列表,()小括号表示分组,2个(\w+)表示匹配2个单词
In : re.findall(r'(\w+) (\w+)', 'hello world')
Out: [('hello', 'world')]
#\w表示匹配任意字母或数字,返回一个列表,()小括号表示分组,打印分组中的内容,2个(\w+)表示匹配2个单词
In : re.findall(r'(\w+) abc (\w+)', 'hello abc world')
Out: [('hello', 'world')]
页:
[1]