Python中正则表达式(re模块)的使用(3)

(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)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a8c545851c5d78c36f9a94fd2e5f28ba.html