1 import re
2 a = 'C|Python|Java|C#|Python|Javascript|Python'
3 print(a.index('Python') > -1) # 判斷字符是否是在字符串中
4 print('Python' in a)
5
6 # -----------------------------------------------#
7 # re.findall函數
8 # -----------------------------------------------#
9 # re.findall('正則表達式', a)--->使用關鍵爲正則表達式爲變量
10 # ---------------------常量--------------------#
11 r = re.findall('Python', a)
12 if len(r) > 0:
13 print("字符串中包含PHP")
14 else:
15 print("no")
16 print(r) # 輸出結果用列表的形式存放
17
18 # ----------------------元字符-----------------#
19 string1 = 'C3Python4Java5C#6Python7Javascript8Python'
20 # for in
21 # 正則表達式
22
23 number1 = re.findall(r'\d+', string1)
24 # D表示非數字,d表示數字 + 表示連續查找!
25 print(number1)
26
27 # ---------------------字符集-----------------#
28 string2 = 'afc, acc, adc, aec, abc, ahc'
29 r = re.findall('a[bf]c', string2) # 找出中間爲b或者f的
30 print(r)
31
32 r = re.findall('a[^bf]c', string2) # 找出中間不爲b或者f的
33 print(r)
34
35 r = re.findall('a[c-f]c', string2) # 連續字符
36 print(r)
37
38 # ---------------------歸納字符集-----------------#
39 # 數字[0-9] 非數字[^0-9] 字符'\D'
40 # \w == [0-9A-Za-z_] 匹配單詞字符 \W 匹配非單詞字符
41 # \D \d
42 # \s 空白字符 \S 非空白字符
43
44 string3 = 'afc, acc ahcdsfa sfa s f465 454 561_61'
45
46 r = re.findall('[0-9A-Za-z_]', string3) # 連續字符s
47 print(r)
48
49 # ---------------------數量詞-----------------#
50
51 string4 = 'python 11111java678php'
52 r = re.findall('[a-z]{3,6}', string4) # 貪婪模式匹配
53 print(r)
54
55 # 貪婪和非貪婪 Python傾向貪婪
56
57 r = re.findall('[a-z]{3,6}?', string4) # 非貪婪模式匹配
58 print(r)
59
60 # 匹配 * 前面的一個字符出現零次或者無限屢次
61 # 匹配 + 前面的一個字符出現1次或者無限屢次
62 # 匹配 ? 前面的一個字符出現0次或者1次(字符串的截取)
63 # 匹配 . 匹配除了換行符\n以外的全部字符
64
65 string5 = 'pytho0python1pythonn2'
66 r = re.findall('python?', string5)
67 print('string5:', r)
68
69 # ---------------------邊界匹配-----------------#
70 # ^表示從開始匹配 $ 表示從末尾匹配
71
72 qq = '107847'
73 r = re.findall('^\d{4,8}$', qq)
74 print(r)
75
76 # ----------------------組-------------------#
77
78 a = 'pythonpythonpythonpythonpythonpythonpython'
79 r = re.findall('(python){2}', a)
80 print(r)
81
82 # ---------------------匹配模式------------------#
83
84 a = 'pythonC#JavaPHP'
85 r = re.findall('c#', a, re.I)
86 print(r)
87
88
89 # -------------------------------------------------#
90 # re.sub函數
91 # -------------------------------------------------#
92
93 lanuage = 'PythonC#JavaPHP'
94 r = re.sub('C#', 'Go', lanuage, count=0)
95 # replace函數
96 print(r)
97
98 # 把函數當作參數傳到sub函數中,對於不一樣的對象作不一樣的處理!
99
100
101 def convert(value):
102 print(value)
103 matched = value.group() # 獲取匹配到的字符串
104 return '!!' + matched + '@@' # 對字符串修改
105
106
107 r = re.sub('C#', convert, lanuage, count=0)
108 # 把匹配到的字符串做爲函數的實參傳入函數中,並在函數中對匹配的字符串操做,
109 # 返回替換後的字符串
110 print(r)
111
112
113 # -------------------------------------------------#
114 # 函數做爲參數的正則匹配例子
115 # -------------------------------------------------#
116 # 數字大於等於6的替換爲9,小於等於6的替換爲0
117
118 def convert1(value):
119 matched = value.group()
120 matched = int(matched) # 轉換爲數字
121 if matched > 6:
122 return '9' # 只能返回字符串
123 elif matched < 6:
124 return '0'
125 print(matched)
126
127
128 s = 'A8C3721D86'
129 r = re.sub('\d', convert1, s)
130 print(r)
131
132 # 軟件設計思想: 一個函數用另外一個函數做爲參數
133 # 接受一個值,返回一個值,不關心中間的處理過程
134
135 # -------------------------------------------------#
136 # search函數和match函數
137 # -------------------------------------------------#
138 s = '18C3721D86'
139 r = re.match('\d', s)
140 r = r.span() # 拿出位置和值
141 print(r)
142
143 r = re.search('\d', s)
144 r = r.group()
145 print(r) # 拿出值
146
147 # -------------------------------------------------#
148 # group分組-----()
149 # -------------------------------------------------#
150 # (爬蟲的應用:根據標籤找到標籤中間的內容,不包括標籤自己)
151 s = 'life is short, i use python'
152 r = re.search('life(.*)python', s)
153 print(r.group(0)) # 獲取分組後的匹配結果
154 print(r.group(1)) # 獲取分組後的匹配結果
155
156 r = re.findall('life(.*)python', s)
157 print(r) # 獲取分組後的匹配結果
158
159
160 s = 'life is short, i use python, i love python'
161 r = re.search('life(.*)python(.*)python', s)
162 print(r.group(0)) # 獲取分組後的匹配結果
163 print(r.group(1)) # 獲取分組後的匹配結果
164 print(r.group(2)) # 獲取分組後的匹配結果
165
166 print(r.group(0, 1, 2)) # 獲取分組後的匹配結果
167
168 print(r.groups()) # 匹配結果