19 python正则表达式及相关函数
生活随笔
收集整理的這篇文章主要介紹了
19 python正则表达式及相关函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 1,正則表達(dá)式
2 ########################################
3 1,元字符
4 . ^ $ * + ? {} [] \ | ()
5
6 "." 任意字符
7 "^" 字符串開始 '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
8 "$" 字符串結(jié)尾 與上同理
9 "\\" 特殊字符轉(zhuǎn)義或者特殊序列
10 [] 表示一個字符集,匹配字符集中的一個字符
11 [0-9]、[a-z]、[A-Z]、[^0]
12 []中如果出現(xiàn)元字符,則元字符匹配意義失效,只作為普通字符
13
14 "*" 0 個或多個字符(貪婪匹配) <*>匹配<title>chinaunix</title>
15 "+" 1 個或多個字符(貪婪匹配) 與上同理
16 "?" 0 個或1個字符(貪婪匹配) 即可有可無
17 {m} 對前一個字符重復(fù)m次,a{6}匹配6個a、a{2,4}匹配2到4個a
18 {m,n} 對于前一個字符重復(fù)m到n次,
19 {m,n}? 對于前一個字符重復(fù)m到n次,并取盡可能少
20 re.findall("a{2,4}?","aaaaaa")中 只會匹配2個
21
22
23
24 "|" 或 A|B,或運算
25 (...) 匹配括號中任意表達(dá)式
26 (?#...) 注釋,可忽略
27 (?=...) Matches if ... matches next, but doesn't consume the string. '(?=test)' 在hellotest中匹配hello
28 (?!...) Matches if ... doesn't match next. '(?!=test)' 若hello后面不為test,匹配hello
29 (?<=...) Matches if preceded by ... (must be fixed length). '(?<=hello)test' 在hellotest中匹配test
30 (?<!...) Matches if not preceded by ... (must be fixed length). '(?<!hello)test' 在hellotest中不匹配test
31
32 #############################################
33 正則表達(dá)式特殊序列表如下:
34 \A 只在字符串開始進(jìn)行匹配
35 \Z 只在字符串結(jié)尾進(jìn)行匹配
36 \b 匹配位于開始或結(jié)尾的空字符串
37 \B 匹配不位于開始或結(jié)尾的空字符串
38 \d 相當(dāng)于[0-9]
39 \D 相當(dāng)于[^0-9]
40 \s 匹配任意空白字符:[\t\n\r\r\v]
41 \S 匹配任意非空白字符:[^\t\n\r\r\v]
42 \w 匹配任意數(shù)字和字母:[a-zA-Z0-9]
43 \W 匹配任意非數(shù)字和字母:[^a-zA-Z0-9]
44
45 ########################################################
46 ########## 正則表達(dá)式的一些函數(shù) ###############
47 ########################################################
48 python中re模塊的用法
49
50 Python 的 re 模塊(Regular Expression 正則表達(dá)式)
51
52 下面我主要總結(jié)了re的常用方法。
53 1.re的簡介
54 使用python的re模塊,python 會將正則表達(dá)式轉(zhuǎn)化為字節(jié)碼,利用 C 語言的匹配引擎進(jìn)行深度優(yōu)先的匹配。
55
56 help(‘modules’) ---查看python中已經(jīng)安裝好的模塊
57 import re
58 print re.__doc__ ##可以查詢re模塊的功能描述信息,即模塊前面的注釋
59 下面會結(jié)合幾個例子說明。
60
61 ############################################
62 i=patt.search(line)
63 if i!=None:
64 print line
65 else:
66 print "xxxx"
67
68
69 1.re的主要功能函數(shù)
70 常用的功能函數(shù)包括:compile、search、match、split、findall(finditer)、sub(subn)
71 ##說明以下中括號,表示可有可無(即是可選參數(shù))
72 compile
73 re.compile(pattern[, flags])
74 作用:
75 把正則表達(dá)式語法轉(zhuǎn)化成正則表達(dá)式對象
76 flags定義包括:
77 re.I:忽略大小寫
78 re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
79 re.M:多行模式(如果要匹配的字符串是多行的話,即忽略換行符)
80 re.S: 即’ . ’并且包括換行符在內(nèi)的任意字符(注意:’ . ’不包括換行符)
81 即增加了 '.'所能夠匹配的范圍
82 re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫
83
84 search ##從整個字符串中匹配
85 ##返回的也是個match對象或者空
86 re.search(pattern, string[, flags])
87 search (string[, pos[, endpos]])
88 作用:在字符串中查找匹配正則表達(dá)式模式的位置,返回 MatchObject 的實例,如果沒有找到匹配的位置,則返回 None。
89
90 match ##只匹配開頭的
91 ##返回的是一個match對象或者空
92 re.match(pattern, string[, flags])
93 match(string[, pos[, endpos]])
94 作用:
95 match() 函數(shù)只在字符串的開始位置嘗試匹配正則表達(dá)式,也就是只報告從位置 0 開始的匹配情況,
96 而 search() 函數(shù)是掃描整個字符串來查找匹配。如果想要搜索整個字符串來尋找匹配,應(yīng)當(dāng)用 search()。
97
98 split
99 ##返回字符串列表
100 re.split(pattern, string[, maxsplit=0, flags=0])
101 split(string[, maxsplit=0])
102 作用:可以將字符串匹配正則表達(dá)式的部分割開并返回一個列表
103
104 例:
105 list1=re.split(r"ni","sssniaaanidddniiii")
106 print (list1)
107 結(jié)果為:
108 ["sss","aaa","ddd","iiii"]
109 例:
110 list1=re.split(r"(ni)","sssniaaanidddniiii") ###注意正則表達(dá)式使用括號和不使用括號的區(qū)別
111 print (list1)
112 結(jié)果為:
113 ["sss","ni","aaa","ni","ddd","ni","iiii"]
114
115
116 findall
117 ##返回匹配成功的字符列表或者空
118 re.findall(pattern, string[, flags])
119 findall(string[, pos[, endpos]])
120 作用:在字符串中找到正則表達(dá)式所匹配的所有子串,并組成一個列表返回
121 例:查找[]包括的內(nèi)容(貪婪和非貪婪查找)
122 例:
123 a=re.findall(r"ni","woainidddni")
124 print (a)
125 結(jié)果為:["ni","ni"] ##返回的是將匹配成功的字符串截取出來,返回,組成列表
126
127
128 finditer ()
129 ##返回的是一個迭代器(iterator)的對象或者空
130
131 sub()/subn()
132 sub(正則,要替換成的字符,原始字符串)
133 例:
134 r=re.compile (r"a..b" )
135 a=r.sub("eee","ddaxybccc")
136 print (a)
137 >>ddeeeccc
138 --------
139 print ("#"*20)
140 rr=r"a..b"
141 a=re.sub(rr,"eeeeee","dddaxxbccc")
142 print (a)
143 >>dddeeeeeeccc
144 -----------
145 rr=r"a..b"
146 a=re.sub(rr,"","dddaxxbccc")
147 print (a)
148
149
150 說明:replace也是可以進(jìn)行替換的,但是的參數(shù)并不是正則(因為replace參數(shù)不識別元字符)
151
152
153
154 ####### 例子: ########################
155 例:最基本的用法,通過re.RegexObject對象調(diào)用
156 #!/usr/bin/env python
157 import re
158 r1 = re.compile(r'world') ##把“word”字符串,轉(zhuǎn)化成正則表達(dá)式的對象,這樣就可以調(diào)用正則表達(dá)式的其它函數(shù)了
159 if r1.match('helloworld'): ##調(diào)用匹配函數(shù)
160 print 'match succeeds'
161 else:
162 print 'match fails' ##因為是從位置0開始match所以,未匹配成功,
163
164 if r1.search('helloworld'):
165 print 'search succeeds' ##因為是搜索整個字符串進(jìn)行匹配,所以會匹配成功
166 else:
167 print 'search fails'
168 說明:
169 以下執(zhí)行結(jié)果為:
170 match fails
171 search fails
172
173 說明一下:
174 r是raw(原始)的意思。因為在表示字符串中有一些轉(zhuǎn)義符,如表示回車'\n'。如果要表示\表需要寫為'\\'。但如果我就是需要表示一個'\'+'n',不用r方式要寫為:'\\n'。但使用r方式則為r'\n'這樣清晰多了。
175
176 例:設(shè)置flag
177
178 #r2 = re.compile(r'n$', re.S)
179 #r2 = re.compile('\n$', re.S)
180 r2 = re.compile('World$', re.I) ##設(shè)置忽略大小寫
181 if r2.search('helloworld\n'): ##所以就可以匹配成功
182 print 'search succeeds'
183 else:
184 print 'search fails'
185
186 例:直接調(diào)用
187
188 if re.search(r'abc','helloaaabcdworldn'):
189 print 'search succeeds'
190 else:
191 print 'search fails'
192
193 說明:
194 使用python是的正則表達(dá)式,
195 1,可以先 生成正則表達(dá)式對象
196 1.1,再使用該對象調(diào)用相應(yīng)函數(shù)進(jìn)行正則匹配
197
198 2,可以直接使用正則表達(dá)式類,調(diào)用類中的方法,將正則表達(dá)式作為第一個參數(shù),被匹配的作為第二個參數(shù),
199
200 #################################################################
201 4,正則分組
202 使用()
203 例:
204 匹配郵箱
205 email=r"\w{3}@\w+(\.com|\.cn)"
206 re.findall(email,"hyy@sina.com")
207 re.findall(email,"hyy@yahoo.cn")
208
209 注意:
210 如果正則中使用到分組,則返回的只有分組所匹配成功的數(shù)據(jù)(雖說匹配的有很多)
211 即優(yōu)先返回分組所匹配的數(shù)據(jù)
212
213 說明:
214 因為有時候,我們雖說匹配很多,但是我們只想要匹配出來字符串的某一段
215 此時只需使用()進(jìn)行分組就好了
?
轉(zhuǎn)載于:https://www.cnblogs.com/2mei/p/9254211.html
總結(jié)
以上是生活随笔為你收集整理的19 python正则表达式及相关函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql foreignkey 相关
- 下一篇: 【SaltStack官方版】—— STO