常用元字符有:
[] ^ $ \ * + ? {} .
python中使用正則運算式需要匯入re模塊
下面介紹用法
[] 指定一個字符集,[ABC]表示ABC的字符集,[^ABC] 取反,除了ABC的字符集,
>>> import re >>> r = r"ABC[ABC]" #定義一個正則 >>> >>> re.findall(r,'ABCA') #使用findall進行匹配 ['ABCA'] >>> re.findall(r,'ABCB') ['ABCB'] >>> re.findall(r,'ABCD') [] >>> r = r"ABC[^ABC]" #取反 >>> re.findall(r,'ABCD') ['ABCD'] >>> re.findall(r,'ABCA') [] >>>
^ 匹配行首 ^h 如果行首是h,則回傳h,如果不是h則回傳空
>>> r = r"^h" >>> re.findall(r,'hello') ['h'] >>> re.findall(r,'ehllo') [] >>>
$ 匹配行尾,和^是反著來的,不難理解,匹配末尾
>>> r = r"h$" >>> re.findall(r,'hello') [] >>> re.findall(r,'olleh') ['h'] >>>
\ 轉義字符
反斜杠后面加不同的字符以表示不同的特殊含義
\d 匹配任何十進制數 相當于[0-9] \D 匹配任何非數字字符,相當于[^0-9] \s 匹配任何空白字符,相當于[\t\n\r\f\v] \S 匹配任何非空白字符,相當于[^\t\n\r\f\v] \w 匹配任何字母數字字符,相當于[a-zA-Z0-9] \W 匹配任何非字母數字字符,相當于[^a-zA-Z0-9]
>>> r1 = r"day=\d" >>> r2 = r"day=\D" >>> st = 'day=1 day=2 day=3 day=a day=b day=c' >>> re.findall(r1,st) ['day=1', 'day=2', 'day=3'] >>> re.findall(r2,st) ['day=a', 'day=b', 'day=c'] >>>
>>> r3 = r"enter=\s" >>> r4 = r"enter=\S" >>> >>> st = ''' enter= enter=1 enter= enter=3 enter= enter= ''' >>> re.findall(r3,st) ['enter=\n', 'enter= ', 'enter=\n', 'enter=\n'] >>> re.findall(r4,st) ['enter=1', 'enter=3'] >>>
>>> r5 = r"\w" >>> r6 = r"\W" >>> st = 'abcdefg1234567!@#$%^&' >>> re.findall(r5,st) ['a', 'b', 'c', 'd', 'e', 'f', 'g', '1', '2', '3', '4', '5', '6', '7'] >>> re.findall(r6,st) ['!', '@', '#', '$', '%', '^', '&'] >>>
* + ? 都是重復的意思
*重復0次或多次、+重復1次或多次、?重復0次或1次
>>> r1 = r"ab*" >>> re.findall(r1,'a') ['a'] >>> re.findall(r1,'ab') ['ab'] >>> re.findall(r1,'abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb') ['abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'] >>>
>>> r2 = r"ab+" >>> re.findall(r2,'ab') ['ab'] >>> re.findall(r2,'a') [] >>> re.findall(r2,'abbbbbbbbbbbbbbbbbbbbbbbbbbbbb') ['abbbbbbbbbbbbbbbbbbbbbbbbbbbbb'] >>>
>>> r3 = r"ab?" >>> re.findall(r3,'a') ['a'] >>> re.findall(r3,'ab') ['ab'] >>> re.findall(r3,'abb') ['ab'] >>> re.findall(r3,'abbbbbbbbbb') ['ab'] >>>
{}表示重復的范圍,{m,n}最少重復m次,最多重復n次
舉個成績的例子吧,最少1位,最多2位,
>>> r1 = r"\d{1,3}" >>> re.findall(r1,'100') ['100'] >>> re.findall(r1,'1') ['1'] >>> re.findall(r1,'') [] >>> re.findall(r1,'1000') ['100', '0'] >>> re.findall(r1,'1001') ['100', '1'] >>>
它會把多余的位扔到串列的后面元素中,
.
.的用法就是匹配所有,看下面例子即可
.*是匹配0次或多次,.+是1次或多次,一般用+
>>> r1 = r"src=https://www.cnblogs.com/Renqy/p/.*" >>> re.findall(r1,'src=https://www.cnblogs.com/Renqy/p/img http qwerqwer') ['src=https://www.cnblogs.com/Renqy/p/img http qwerqwer'] >>> re.findall(r1,'src=https://www.cnblogs.com/Renqy/p/img http hello') ['src=https://www.cnblogs.com/Renqy/p/img http hello'] >>>
>>> r1 = r".*.com" >>> re.findall(r1,'www.com') ['www.com'] >>> re.findall(r1,'hello.com') ['hello.com'] >>>
讀書和健身總有一個在路上
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/152946.html
標籤:Python
