(2)通过match()方法匹配字符串
1)作用:从起始位置(开头)开始匹配,匹配成功返回一个对象,未匹配成功返回None
2)语法:match(pattern, string, flags=0)
pattern: 正则模型
string: 要匹配的字符串
falgs : 匹配模式
3)matchobect对象的方法
group():返回被RE匹配的的字符串
start():返回匹配开始的位置
end():返回匹配结束的位置
span():返回一个元组包含匹配(开始,结束)的位置
group():返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串
group(n,m) :返回组号为n,m所匹配的字符串,如果组号不存在,则返回组号匹配的字符串
groups():返回一个包括正则表达式中所有小组字符串的元组,从1到所含的小组号,通常 groups()不需要参数,返回一个元组,元组中元素是正 则表达式中定义的组
import re
origin = "has dfuojqwlm098"
# r = re.match("h\w+", origin)
# r = re.match("h(\w+)", origin) #在匹配到的数据中再通过\w+去匹配
r = re.match("h(?P<name>\w+)", origin) #给分组名名
print(r.group()) # 获取匹配到的所有结果
print(r.groups()) # 获取模型中匹配到的分组结果
print(r.groupdict()) # 获取模型中匹配到的分组结果
(3)使用search()在一个字符串中查找匹配
1)作用:search()会用它的字符串参数,在任意位置对给定正则表达式模式搜索第一次出现的匹配情况。如果搜索到成功的匹配,就会返回一个匹配对象;否则,返回None.
2)用法:同match()
importre
m =re.match('foo','seafood')
if m isnot None:
print(m.group()) #使用match匹配不到,所以没有打印
m =re.search('foo','seafood')
if m isnot None:
print(m.group()) #使用search匹配到了foo
origin = "has dayi haha hal dfuojdayi098"
r = re.search("d(\w+).*(?P<name>\d)$", origin)
print(r.group()) # 获取匹配到的所有结果
print(r.groups()) # 获取模型中匹配到的分组结果
print(r.groupdict()) # 获取模型中匹配到的分组中所有执行了key的组
(4)重复、特殊字符及分组匹配
正则表达式中最常见的情况包括特殊字符��使用,正则表达式模式的重复出现,以及使用圆括号对匹配模式的各部分进行分组和提取操作。
import re
#一个分组多次匹配
# patt = '\w+@(\w+\.)?\w+\.com' #创建一个匹配规则,要求括号中的内容出现0次或一次
# print(re.match(patt, 'linuxidc@126.edu.com is mail').group())
patt = '\w+@(\w+\.)*\w+\.com' #创建一个匹配规则,匹配括号中的内容出现0次或多次
print(re.match(patt,'linuxidc@126.edu.dayi.com is mail').group())
#多个分组分别匹配
m = re.match('(\w\w\w)-(\d\d\d)', 'abc-123')
print(m.group(1)) #打印分组以中的内容
print(m.group(2)) #打印分组2中的内容
print(m.group()) #打印分组中的所有内容
#分组嵌套匹配
n = re.match('(a(b))', 'abcdefgh')
print(n.group(1)) #打印匹配到的分组1,即'(a(b))'
print(n.group(2)) #打印匹配到的分组2即'(b)'
print(n.groups()) #打印匹配到的所有分组,即'(ab)','(b)'
(5)匹配字符串的起始结尾及单词边界
import re
#开头匹配
print(re.search('^linuxidc', 'dayi123 is nb').group())
# print(re.search('^dayi', 'her is dayi').group())
#边界匹配
print(re.search(r'\bhello', 'hello world').group())#print(re.search(r'\Bhello','worldhellower').group()) #有边界匹配时会报错
print(re.search(r'\Bhello', 'worldhellower').group())
(6)使用findall和finditer()查找每一次出现的位置
findall()查询字符串中某个正则表达式模式全部的非重复出现的情况,findall返回的是一个列表,如果没有匹配到则返回一个空列表,如果匹配成功,列表包含所有成功的匹配部分(从左向有按顺序排列)
import re
origin = "has haha hal dfuojqwlm098"
print(re.findall("h\w+", origin)) #找到字符串中所有的匹配到的内容
print(re.findall("h(\w+)", origin)) #打印匹配到的列表
r = re.findall("h(\w+)a(bc)c", origin) #因为匹配不到所有打印一个空列表
print(r)