python 正则表达式

#! /usr/bin/env python
# -*- coding:utf-8 -*-
import re
# 正则表达式:re模块
# 1.普通字符:大多数字符和字母都会跟自身匹配
# re.fiandall() 返回一个列表

#2.元字符:
# . 通配符 一个只能匹配一个结果
# ^ 以xx开头的匹配
# $ 以xx为结尾的
# * 重复 匹配0到多次
# + 重复 匹配1到多次
# ? 匹配0到1次
# {m,n} 匹配前一个元字符m到n次
# \ 转义字符 其后字符失去特殊元字符含义
#[] 字符集 可匹配任意一个字符
# | 或 逻辑表达式
# d = [0-9] 匹配一个数字
# D = [^0-9] 匹配非数字
# s 匹配任意空白字符
# S 匹配非空白字符
# w =[a-zA-Z_] 匹配数字、字母、下划线中任意一个字符
# W 匹配非数字、字母、下划线中的任意字符

#3.模式
# I 忽略大小写模式
# L 字符集本地化
# M 多行模式
# S 此模式下.可匹配包括换行符在内的任意字符
# X 冗余模式 忽略表达式中的空白和注释

# findall(pattern, string, flags=0)
str = "WoshiZhongGuoRen"
regex0 = re.findall("guo",str)
regex1 = re.findall("guo",str,re.I)
print(regex0)
print(regex1)


str1 = '''where are you
I an here
oh I see'''

index0 = re.findall("^w+",str1)
index1 = re.findall("^w+",str1,re.M)
print(index0)
print(index1)

#4.函数
#邮箱正则表达式
#compile(pattern, flags=0) 使用 compile 函数预编译出一个正则模式之后再去使用,这样在后面的代码中可以很方便的复用它
#编译其实是很费时的,这样可以提升效率
str2 = "23223whh./#$weijigh@126.comrtdfd"
emailregex = re.compile("[0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}.[com,cn,net]{1,3}")
index2 = emailregex.findall(str2)
print(index2)#['weijigh@126.com']

#match(pattern, string, flags=0)
# 使用指定正则去待操作字符串中寻找可以匹配的子串, 返回匹配上的第一个字串,并且不再继续找
#从字符串开始处开始查找的,如果开始处不匹配,则不再继续寻找,找不到时返回 None
#web框架大量使用
index3 = emailregex.match(str2)
print(index3)#None

#search(pattern, string, flags=0)
#不限制正则表达式的开始匹配位置,匹配找到的第一个字符串
index4 = emailregex.search(str2)
print(index4)#<_sre.SRE_Match object; span=(12, 27), match='weijigh@126.com'>

#split(pattern, string, maxsplit=0, flags=0)
#maxsplit 指定切分次数
#函数使用给定正则表达式寻找切分字符串位置,返回包含切分后子串的列表
# 如果匹配不到,则返回包含原字符串的一个列表
index5 =emailregex.split(str2)
print(index5)#['23223whh./#$', 'rtdfd']

#sub(pattern, repl, string, count=0, flags=0)
#将正则表达式 pattern 匹配到的字符串替换为 repl 指定的字符串
#参数 count 用于指定最大替换次数
index6 = emailregex.sub('world',str2)
print(index6)#23223whh./#$worldrtdfd

#5.组(组与Match对象是Python正则式的重点)
#分组的目的:从匹配到的结果中再次提取想要的部分结果
#(?P<name>...) 分组的命名模式,取此分组中的内容时可以使用索引也可以使用name
#(?P=name) 分组的引用模式,可在同一个正则表达式用引用前面命名过的正则
str3 = "tom 19 05317652"
p=re.compile(r'(?P<name>[a-z]+)s+(?P<age>d+)s+(?P<tel>d+).*', re.I)
p.groupindex
index7 = p.match(str3)
print(index7)
print(index7.group())
print(index7.group('age'))
原文地址:https://www.cnblogs.com/wuxinyan/p/8727303.html