python3 正则表达式re模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 正则表达式re模块相关的知识,希望对你有一定的参考价值。
正则表达式的功能:字符串的模糊匹配查询
import re
元字符
. ---->匹配除换行符意外的任意字符 ^ ---->匹配行首位置 $ ---->匹配行尾位置 关于重复的元字符 * ---->(0,无穷) + ---->(1,无穷) ? ---->(0,1) {} --->指定次数
转义符 \
1、反斜杠后边跟元字符去除特殊功能,比如\.
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 匹配一个特殊字符边界,比如空格 ,&,#等
\b 的应用
ret=re.findall(r‘I\b‘,‘I am LIST‘) print(ret)#[‘I‘]
正则应用
res = ‘\\‘ #\是转义符,前面再加个\ print(res) #\ res = ‘\\n‘ print(res) #\n ret=re.findall("(李\w{1,2})","李杰,李刚,王超,占山,李连英") # 匹配出所有符合条件的元素 print(ret)
# ret=re.findall(‘c\l‘,‘abc\le‘) # print(ret)#报错 # ret=re.findall(‘c\\l‘,‘abc\le‘) # print(ret)#报错 ret=re.findall(‘c\\\\l‘,‘abc\le‘) print(ret)#[‘c\\l‘] ret=re.findall(r‘c\\l‘,‘abc\le‘) print(ret)#[‘c\\l‘] # \b是特殊符号所以,‘abc\be‘前面需要加r ret=re.findall(r‘c\\b‘,r‘abc\be‘) print(ret)#[‘c\\b‘]
分组 ()
m = re.findall(r‘(ad)+‘, ‘add‘) print(m)
字符集[]
#[abc] 匹配a或b或c ret = re.findall(‘a[bc]d‘, ‘acd‘) print(ret) # [‘acd‘] ret = re.findall(‘[a-z]‘, ‘acd‘) print(ret) # [‘a‘, ‘c‘, ‘d‘] ret = re.findall(‘[.*+]‘, ‘a.cd+‘) print(ret) # [‘.‘, ‘+‘]
在字符集里有功能的符号: - ^ \
ret = re.findall(‘[1-9]‘, ‘45dha3‘) print(ret) # [‘4‘, ‘5‘, ‘3‘] ret = re.findall(‘[^ab]‘, ‘45bdha3‘) # ^ 非 print(ret) # [‘4‘, ‘5‘, ‘d‘, ‘h‘, ‘3‘] ret = re.findall(‘[\d]‘, ‘45bdha3‘) print(ret) # [‘4‘, ‘5‘, ‘3‘]
re模块下的常用方法
import re ret = re.findall(‘a‘, ‘alvin yuan‘) # 返回所有满足匹配条件的结果,放在列表里 print(ret) ret = re.search(‘a‘, ‘alvin yuan‘).group() print(ret) print(type(ret)) # 函数会在字符串内查找模式匹配,直到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以 # 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。 ret = re.match(‘a‘, ‘abc‘).group() # 同search,不过尽在字符串开始处进行匹配 print(ret)
.search分段
import re # ret = re.search(r‘-blog-aticles-(20[01]\d)-(\d+)‘,‘-blog-aticles-2015-04‘) ret = re.search(r‘-blog-aticles-(?P<year>20[01]\d)-(?P<month>\d+)‘,‘-blog-aticles-2015-04‘) print(ret.group()) print(ret.group(‘year‘)) print(ret.group(‘month‘))
findall的优先级查询
import re ret = re.findall(‘www.(baidu|oldboy).com‘, ‘www.oldboy.com‘) print(ret) # [‘oldboy‘] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可 ret = re.findall(‘www.(?:baidu|oldboy).com‘, ‘www.oldboy.com‘) # ?:取消组优先 print(ret) # [‘www.oldboy.com‘]
以上是关于python3 正则表达式re模块的主要内容,如果未能解决你的问题,请参考以下文章