import re ret = re.findall("e..a", "Hermaeus") #"."是模糊表示一个字符 print(ret) ['erma'] ret = re.findall("^H..m", "Hermaeus") #"^"表示开头必须是某个字符 print(ret) ['Herm'] ret = re.findall("a..s$", "Hermaeus") #"$"表示结尾必须是某个字符 print(ret) ['aeus'] ret = re.findall("abc*", "abccccc") #贪婪匹配[0,+∞] print(ret) ['abccccc'] ret = re.findall("abc+", "abccccc") #贪婪匹配[1,+∞] print(ret) ['abccccc'] ret = re.findall("abc?", "abccccc") #惰性匹配[0,1] print(ret) ['abc'] ret = re.findall("abc{1,3}", "abccccc") #贪婪匹配[1,3] print(ret) ['abccc'] ret = re.findall("abc*?", "abccccc") #这样会让其变成惰性匹配 print(ret) ['ab']
[ ]
即在字符集中任意匹配一个正则表达式
import re ret = re.findall("a[bc]", "abc") print(ret) ['ab'] ret = re.findall("[a-z]", "ahfao") print(ret) ['a', 'h', 'f', 'a', 'o'] ret = re.findall("[%$]", "ada%jf$") #在字符集里面除了:- ^ \之外都是普通字符 print(ret) ['%', '$'] ##" - " 取在这之间的 ret = re.findall("[1-9]", "1jkah1k2k3j") print(ret) ['1', '1', '2', '3'] ##" ^ " 取反,即在这字符集里面没有的 ret = re.findall("[^ab]", "7ajkf2bfjab") print(ret) ['7', 'j', 'k', 'f', '2', 'f', 'j'] ##" \ " 转义符 ret = re.findall("[\d]", "45dhaf2") print(ret) ['4', '5', '2']
\.
\d
\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_]\b
匹配一个特殊字符边界,好比空格 ,&,#等import re ret = re.findall(r"I\b", "I am LIST") ##添加"r",就变成了原生字符串,它表示把须要匹配的字符集直接交给模块处理 print(ret)
( )
import re ret = re.search("(?P<id>\d{2})/(?P<name>\w{3})", "23/com") #"?P<id> 取名 print(ret) <_sre.SRE_Match object; span=(0, 6), match='23/com'> #返回一个对象 print(ret.group()) 23/com print(ret.group("id")) 23
|
符号import re ret = re.search("(ab)|\d", "rabjk4fk") #二选一 print(ret) print(ret.group())
import re #findall()方法 #返回全部知足匹配条件的结果,放在列表里 re.findall('a','alvin yuan') #search()方法 #函数会在字符串内查找模式匹配,只到找到第一个匹配而后返回一个包含匹配信息的对象,该对象能够;经过调用group()方法获得匹配的字符串,若是字符串没有匹配,则返回None。 re.search('a','alvin yuan').group() #match()方法 #同search,不过尽在字符串开始处进行匹配 re.match('a','abc').group() #split()方法 #先按'a'分割获得''和'bcd',在对''和'bcd'分别按'b'分割 ret=re.split('[ab]','abcd') print(ret)#['', '', 'cd'] #sub()和subn()方法 #替代 ret=re.sub('\d','abc','alvin5yuan6',1) print(ret)#alvinabcyuan6 #替代,且能够选择次数 ret=re.subn('\d','abc','alvin5yuan6') print(ret)#('alvinabcyuanabc', 2) #compile()方法 #对象赋予 obj=re.compile('\d{3}') ret=obj.search('abc123eeee') print(ret.group())#123 #finditer()方法 ret=re.finditer('\d','ds3sy4784a') print(ret) #<callable_iterator object at 0x10195f940> #返回迭代器 print(next(ret).group()) print(next(ret).group())
注意:app
import re ret=re.findall('www.(baidu|oldboy).com','www.oldboy.com') print(ret)['oldboy'] #这是由于findall会优先把匹配结果组里内容返回,若是想要匹配结果,取消权限便可 ['oldboy'] ret=re.findall('www.(?:baidu|oldboy).com','www.oldboy.com') print(ret) ['www.oldboy.com']
在正则表达式中,能够对过滤到的字符串进行分组,分组使用圆括号的方式:函数
group
:和group(0)
等价,返回的是整个知足条件的字符串groups
:返回的是里面的子组,索引从1开始group(1)
:返回的是第一个子组,能够传入多个代码实例:spa
import re text = "apple price is $99,orange price is $10" ret = re.search(r".*(\$\d+).*(\$\d+)",text) print(ret.group()) print(ret.group(0)) print(ret.group(1)) print(ret.group(2)) print(ret.groups()) ''' result: apple price is $99,orange price is $10 apple price is $99,orange price is $10 $99 $10 ('$99', '$10') '''