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 [1]: import re
In [2]: 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 [1]: import re
In [2]: help(re.findall)
#匹配以ab开头的行,没有找到
In [3]: re.findall(r'^ab+', 'asdabbbb')
Out[3]: []
#匹配包含ab,b可以有多个,匹配到abbbb
In [4]: re.findall(r'ab+', 'asdabbbb')
Out[4]: ['abbbb']
#匹配以ab开头的字符,ab
In [5]: re.findall(r'^ab+', 'absdabbbb')
Out[5]: ['ab']
#匹配包含字符ab,匹配结果ab,abbbb
In [6]: re.findall(r'ab+', 'absdabbbb')
Out[6]: ['ab', 'abbbb']
# .表示匹配任意一个字符
In [7]: re.findall(r".",'abc\nab\n')
Out[7]: ['a', 'b', 'c', 'a', 'b']
# re.S表示“.”匹配任意一个字符,包括换行符
In [8]: re.findall(r".",'abc\nab\n',re.S)
Out[8]: ['a', 'b', 'c', '\n', 'a', 'b', '\n']
# abc$表示以abc结尾的字符
In [10]: re.findall(r'abc$','12345abc')
Out[10]: ['abc']
# ab*表示:b是0次或多次,匹配ab或a或abbbb 个数b>=0 ab* = ab{0,} *0次或多次
In [17]: re.findall(r'ab*','abcea')
Out[17]: ['ab', 'a']
In [22]: re.findall(r'ab*','abceabbbba')
Out[22]: ['ab', 'abbbb', 'a']
# ab+表示:b是1次或多次,匹配ab或则abbbb 个数b>=1 ab+ = ab{1,} +1次或多次
In [18]: re.findall(r'ab+','abcea')
Out[18]: ['ab']
In [19]: re.findall(r'ab+','abceabbbb')
Out[19]: ['ab', 'abbbb']
# ab?表示:b是0次或1次,匹配ab或则a 个数b=0或=1 ab? = ab{0,1} ?0次或1次
In [20]: re.findall(r'ab?','abceabbbba')
Out[20]: ['ab', 'ab', 'a']
# ab{0,}=ab+表示: b是0次或多次, 个数b>=0
In [29]: re.findall(r'ab{0,}','abceabbbbcdefabbbbbbbbbbbbbbbbbbbb')
Out[29]: ['ab', 'abbbb', 'abbbbbbbbbbbbbbbbbbbb']
# ab{0,}表示: b是0-10次, 个数b 0<=b<=10
In [30]: re.findall(r'ab{0,10}','abceabbbbcdefabbbbbbbbbbbbbbbbbbbb')
Out[30]: ['ab', 'abbbb', 'abbbbbbbbbb']
# ab{0,}表示: b是0-1次, 个数b 0<=b<=1
In [32]: re.findall(r'ab{0,1}','abceabbbbcdefa')
Out[32]: ['ab', 'ab', 'a']
#\d表示一个数字,匹配1,2,3,0
In [38]: re.findall(r'[\d]','abcea1230')
Out[38]: ['1', '2', '3', '0']
#\d表示一个字符,a-z表示任何一个小写字母,表示a-z任意一个字符
In [33]: re.findall(r'[\da-z]','abcea')
Out[33]: ['a', 'b', 'c', 'e', 'a']
#\d表示一个字符,表示a-z任意一个字符任意数字
In [34]: re.findall(r'[\da-z]','abcea123')
Out[34]: ['a', 'b', 'c', 'e', 'a', '1', '2', '3']
#\d表示一个字符,表示a-z任意一个小写字母,+表示[\da-z]是一个整体,出现一次或多次
In [35]: re.findall(r'[\da-z]+','abcea123')
Out[35]: ['abcea123']
#\转译字符,\$表示美元符号$,而不是以abc结尾
In [40]: re.findall(r'abc$' , 'abc$')
Out[40]: []
In [41]: re.findall(r'abc\$' , 'abc$')
Out[41]: ['abc$']
#|表示或,包含a或b
In [45]: re.findall(r'a|b','abc')
Out[45]: ['a', 'b']
#不包含A或B
In [46]: re.findall(r'a|b','AB')
Out[46]: []
#使用re.I表示忽略大小写
In [48]: re.findall(r'a|b','AB',re.I)
Out[48]: ['A', 'B']
#\w表示匹配任意字母或数字,返回一个列表,()小括号表示分组,2个(\w+)表示匹配2个单词
In [52]: re.findall(r'(\w+) (\w+)', 'hello world')
Out[52]: [('hello', 'world')]
#\w表示匹配任意字母或数字,返回一个列表,()小括号表示分组,打印分组中的内容,2个(\w+)表示匹配2个单词
In [58]: re.findall(r'(\w+) abc (\w+)', 'hello abc world')
Out[58]: [('hello', 'world')]
|