正则表达式常用示例

import re

"""
   使用match方法进行匹配
   result = re.match(正则表达式,要匹配的字符串)
   如果match匹配到数据的话,就可以使用group方法提取数据

   注: 若字符串匹配正则表达式,则match方法返回匹配对象(Match Object), 否则返回None(不是空字符串)
       match方法是从左到右匹配(因为match的这种特性,所以 ^ 从字符串头开始匹配 可以不用写),匹配到不一样的地方,match方法就结束!

"""
"""
.   :匹配任意一个字符,\n除外
[]  :匹配[]中列举的字符
\d  : 数字,即0~9
\D  : 非数字
\s  : 空白字符,包括空格, \n , \t ,\r, 回车换行
\S  :非空白字符
\w  :单词,(可以看成是校验python变量名,实际两者没有任何关系,a~z , A~Z, 0~9 , _ )
\W  : 非单词字符
"""
In [1]: import re

In [2]: re.match(‘admin‘,‘good.admin‘)

In [3]: re.match(‘.+‘,‘good.admin‘)
Out[3]: <re.Match object; span=(0, 10), match=‘good.admin‘>

In [4]: re.match(‘.‘,‘good.admin‘)
Out[4]: <re.Match object; span=(0, 1), match=‘g‘>

In [5]: re.match(‘..‘,‘good.admin‘)
Out[5]: <re.Match object; span=(0, 2), match=‘go‘>

In [6]: re.match(‘.*‘,‘good.admin‘)
Out[6]: <re.Match object; span=(0, 10), match=‘good.admin‘>
In [7]: re.match(‘\w‘,‘good‘)
Out[7]: <re.Match object; span=(0, 1), match=‘g‘>

In [8]: re.match(‘\w‘,‘g1‘)
Out[8]: <re.Match object; span=(0, 1), match=‘g‘>

In [9]: re.match(‘\W‘,‘g1‘)
# \w与g匹配,但是\W与1不相匹配,所以最终还是不匹配,返回None
In [10]: re.match(‘\w\W‘,‘g1‘)
"""

边界问题

^ : 匹配字符串开头
$ : 匹配结尾
\b : 匹配单词边界
\B : 匹配非单词边界

"""
"""

匹配数量:

    *   : 匹配一个字符出现0次或者无限多次
    +   :匹配一个字符出现1次或者无限多次
    ?  :匹配一个字符出现0次或者1次
    {m} : 匹配一个字符出现m次
    {m,}: 匹配一个字符至少出现m次
    {m,n} : 匹配一个字符出现m到n次

"""
"""

边界问题

^ : 匹配字符串开头
$ : 匹配结尾
\b : 匹配单词边界
\B : 匹配非单词边界

"""
‘‘‘
示例2:匹配手机号
‘‘‘

r = re.match(‘1[35689]\d{9}$‘,‘13218545678‘)
print(r)  # <re.Match object; span=(0, 11), match=‘13218545678‘>

r = re.match(‘1[35689]\d{9}$‘,‘132185456789‘)
print(r)  #None

r = re.match(‘1[35689]\d{9}‘,‘132185456789‘)  # 没有$符,无边界问题
print(r)  #<re.Match object; span=(0, 11), match=‘13218545678‘>

r = re.match(‘1[35689]\d{9}‘,‘13218545aaaa6789‘)
print(r)  #None
‘‘‘
示例3: 匹配单词边界

‘‘‘

# r:去掉转义;  ^:字符串开头, od\b:od是单词边界
r = re.match(r‘^\w+od\b‘,‘good‘)
print(r) # <re.Match object; span=(0, 4), match=‘good‘>

r = re.match(r‘^\w+od\b‘,‘gooder‘)
print(r) #None

r = re.match(r‘^\w+\bod\b‘,‘good‘)
print(r) #None

r = re.match(r‘^\w+\bod\b‘,‘jd od‘)
print(r) #None, 因为\b只表示单词边界,并不表示空格

r = re.match(r‘^\w+\s\bod\b‘,‘jd od‘)  # 这里用\s去匹配了jd与od之间的空白字符
print(r) #<re.Match object; span=(0, 5), match=‘jd od‘>

r = re.match(r‘^\w+od\B‘,‘gooder‘)
print(r) #<re.Match object; span=(0, 4), match=‘good‘>

r = re.match(r‘^\w+od\B‘,‘good‘)
print(r) #None
"""
分组:

|      : 表示左右任意一个表达式
(ab)   :  将括号中的字符作为一个分组
\num   : 引用分组num匹配到的字符串
(?P<name>) : 分组起别名
(?P=name)  : 引用别名为name分组匹配到的字符串

"""
‘‘‘示例4 匹配0-100之间的数字‘‘‘

r = re.match(r‘[1-9]\d?$|0$|100$‘,‘100‘ )
print(r) #<re.Match object; span=(0, 3), match=‘100‘>

# 改进版
r = re.match(r‘[1-9]?\d?$|100$‘,‘0‘ )
print(r) #<re.Match object; span=(0, 1), match=‘0‘>
‘‘‘
示例5: 从字符串中抽取特定的字符 , 如抽取h1标签之间的字符
‘‘‘

s = ‘<h1>我是中国人</h1>‘

r = re.match(r"<h1>(.*)</h1>",s)
print(r.group())  #<h1>我是中国人</h1>
print(r.group(1))  # 我是中国人    , 1 : 表过正则表达式分组第1次出现

s = ‘<h1>打倒小日本</h1>‘
r = re.match(r"<h1>(.*)</h1>",s)
print(r.group())  #<h1>打倒小日本</h1>
print(r.group(1))  # 打倒小日本    , 1 : 表过正则表达式分组第1次出现

s = ‘<h1>打倒小日本 我是中国人</h1>‘
r = re.match(r"<h1>(\D*)\s(\D*)</h1>",s)
print(r.group())  #<h1>打倒小日本 我是中国人</h1>
print(r.group(1))  # 打倒小日本  取第1个分组的值
print(r.group(2))  # 我是中国人  取第2个分组的值
print(r.groups())  # 将所有的分组结果以一个元组的形式打印出来
‘‘‘
示例6: 匹配<html><h1>zhengqinfeng</h1></html>,且,首尾尖括号中的内容相同、内层尖括号中的内容相同
‘‘‘

s = ‘<html><h1>zhengqinfeng</h1></html>‘

r = re.match(r‘<.+><.+>.+</.+></.+>‘,s)
print(r)  #<re.Match object; span=(0, 34), match=‘<html><h1>zhengqinfeng</h1></html>‘>

# 上面的正则貌似完成了需要,实则不然, 它并不满足"且"后面的要求,所以正确的正则如下

r= re.match(r‘<(.+)><(.+)>.+</\2></\1>‘,s)  # 记录前面加r,不会会转义
print(r) #<re.Match object; span=(0, 34), match=‘<html><h1>zhengqinfeng</h1></html>‘>

s = ‘<html><h1>zhengqinfeng</h2></html>‘
r= re.match(r‘<(.+)><(.+)>.+</\2></\1>‘,s)  # 记录前面加r,不会会转义
print(r) #None

"""
    使用()时,re会记录()中的内容,我们可以使用\num来引用
    在上面的示例中, 第一次出现的(.+) re会记录为num =1 ; 第二次出现的 (.+) re会记录为num =2
    在后面使用时,可以直接\1, \2来引用值

"""

由例5,例6两示例可知,正则分组用途如下:

1. 从字符串提取出特定的字符

2. 动态引用分组内容进行匹配
‘‘‘
示例7: 抽取邮箱账号

        (163|126|135|qq|gmail)  :表示匹配其中一种
        \.  : 匹配邮箱中的.
        (com|cn|net) : 表示匹配邮箱后缀中的一种
        $ : 表结束 ,也就是说邮箱是以com,cn,或者是net结尾

‘‘‘

p = r‘(\w+)@(163|126|135|qq|gmail)\.(com|cn|net)$‘

r = re.match(p, ‘[email protected]‘)
print(r)
print(r.groups())
print(r.group(1))  # 提取邮箱账号  132
‘‘‘
示例8: 正则分组取名字

‘‘‘

s = ‘<html><h1>zhengqinfeng</h1></html>‘
r =  re.match(‘<(?P<key1>.+)><(?P<key2>.+)>.+</(?P=key2)></(?P=key1)>‘,s)
print(r)  # <re.Match object; span=(0, 34), match=‘<html><h1>zhengqinfeng</h1></html>‘>
print(r.groups())  # (‘html‘, ‘h1‘)

原文地址:https://www.cnblogs.com/z-qinfeng/p/11999963.html

时间: 2024-10-19 12:06:10

正则表达式常用示例的相关文章

scala和正则表达式常用基础知识示例

http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html .     匹配除换行符以外的任意字符\w     匹配字母或数字或下划线或汉字\s     匹配任意的空白符\d     匹配数字\b     匹配单词的开始或结束^     匹配字符串的开始$     匹配字符串的结束在[]里面不需要转义,在外面,如().?之类的字符是需要转义的.后向引用示例:\b(\w+)\b\s+\1\

25个iptables常用示例

25个iptables常用示例 本文将给出25个iptables常用规则示例,这些例子为您提供了些基本的模板,您可以根据特定需求对其进行修改调整以达到期望.  格式 iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型] 参数 -P 设置默认策略:iptables -P INPUT (DROP|ACCEPT) -F 清空规则链 -L 查看规则链 -A 在规则链的末尾加入新规则 -I num 在规则链的头部加入新规则 -D num 删除某一条规则 -s 匹配来源地址IP/M

正则表达式常用符号说明

正则表达式常用符号说明: 1.    .是除换行以外的所有任意符号 2.    \s空白符号 3.    \S除空白符号以外的任意符号 4.    \w字母.数字.下划线 5.    \W 除字母.数字.下划线以外的其他任意符号 6.    \d 数字(0----9) 7.    \D 除数字以外的任意其他符号 8.    ^ 字符串开始 9.    $ 字符串结束 10. * 匹配0到无数次(匹配的是符号前边的字母或者数字等) 11. + 匹配1到无数次(匹配的是符号前边的字母或者数字等) 1

js之checkbox判断常用示例

checkbox常用示例可参考: 关于checkbox自动选中 checkbox选中并通过ajax传数组到后台接收 MP实战系列(十三)之批量修改操作(前后台异步交互) 本次说的是,还是关于智能门锁开锁方式.通常情况下,开锁方式必须选择两种,或至少选择两种,否则就无法弹出对应的开锁方式列表以供勾选,这样一来.这就需要js层面的判断了,不可能全部推到服务器,这样用户少还好,用户多了,就不多说了. 还是那句话,前端能搞定的,就不要后端,特别是JS判断等.前端主要负责的是获取接口,得到数据,渲染htm

正则表达式常用用法汇总 __西科大C语言

正则表达式,又称正规表示法.常规表示法.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式,有木有人像我一样,学了好几遍却还是很懵圈,学的时候老明白了,学完了忘光了.好吧,其实还是练的不够,所谓温故而知新,可以为师矣,今天就随我来复习一下这傲娇的正则表达式吧. 为啥要有正则表达式呢?其

【python】正则表达式-常用函数

m = re.search(pattern, string) # 搜索整个字符串,直到发现符合的子字符串. m = re.match(pattern, string) # 从头开始检查字符串是否符合正则表达式.必须从字符串的第一个字符开始就相符. 可以从这两个函数中选择一个进行搜索.上面的例子中,我们如果使用re.match()的话,则会得到None,因为字符串的起始为‘a’, 不符合'[0-9]'的要求. 对于返回的m, 我们使用m.group()来调用结果.(我们会在后面更详细解释m.gro

正则表达式常用总结

正则表达式,又称正规表示法.常规表示法.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式,有木有人像我一样,学了好几遍却还是很懵圈,学的时候老明白了,学完了忘光了.好吧,其实还是练的不够,所谓温故而知新,可以为师矣,今天就随我来复习一下这傲娇的正则表达式吧. 为啥要有正则表达式呢?其

PHP 正则表达式常用函数使用小结

在PHP中有两套正则表达式函数库.一套是由PCRE(Perl Compatible Regular Expression)库提供的.PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数.另一套是由POSIX(Portable Operation System interface)扩展库提供的.POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以“ereg_”为前缀命名的函数. 两套函数库的功能相似,执行效率稍有不同.一般而言,实

2015-06-30(最新)手机号正则表达式- 校验示例

截止2015年6月底,现有手机号有以下几种: A.电信号段:133/153/180/181/189/177: B.联通号段:130/131/132/155/156/185/186/145/176: C.移动号段:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178. 正则表达式为: /^((1[3,8][0-9])|(15[0,1,2,3,5,6,7,8,9])|(14[5,7])|(17[0,6,