正则 订阅
正则是一个汉语词汇,拼音为zhèng zé,基本意思是正其礼仪法则;正规;常规;正宗等。出自《楚辞·离骚》、《插图本中国文学史》、《东京赋》等文献。 展开全文
正则是一个汉语词汇,拼音为zhèng zé,基本意思是正其礼仪法则;正规;常规;正宗等。出自《楚辞·离骚》、《插图本中国文学史》、《东京赋》等文献。
信息
性    质
汉语词汇
外文名
zhèngzé
出    自
《楚辞·离骚》等
中文名
正则
正则词语释义
拼音:zhèngzé1.正其礼仪法则。 [1]  汉·张衡 《东京赋》:“辩方位而正则,五精帅而来摧。”2.正规;常规。《西游补》第一回:“七龄孔子 ,帐中鸣蟋蟀之音;二八曾参 ,阶下拜荔枝之献。胡为乎不讲此正则也?”茅盾 《追求》八:“一个月前,我还想到五年六年甚至十年以后的我,还有一般人所谓想好好活下去的正则的思想。”3.犹正宗。郑振铎 《插图本中国文学史》第四九章一:“差不多要在元末明初的时候,我们才见到正则的南曲作家的出现。”参见“ 正宗 ”。4、《楚辞·离骚》篇有“皇揽揆余於初度兮,肇锡余以嘉名;名余曰正则兮,字余曰灵均”之句。马茂远《楚辞选》注:“屈原名平,字原。‘正则’,是阐明名平之意,言其公正而有法则,合乎天道”。
收起全文
精华内容
下载资源
问答
  • 手机号验证最新正则表达式

    万次阅读 多人点赞 2020-10-26 08:58:24
    一般表单页面都需要填写手机号,校验用户输入的手机号码是否正确,就要用到正则表达式,用正则表达式来匹配手机号段,如在运营商号段内,则号码正确。因此,需要知道运营商最新的号段,如下所示: 各大运营商手机...

    一般表单页面都需要填写手机号,校验用户输入的手机号码是否正确,就要用到正则表达式,用正则表达式来匹配手机号段,如在运营商号段内,则号码正确。因此,需要知道运营商最新的号段,如下所示:

    各大运营商手机号码段(新)

    中国电信号段

    133、153、173、177、180、181、189、190、191、193、199

    中国联通号段

    130、131、132、145、155、156、166、167、171、175、176、185、186、196

    中国移动号段

    134(0-8)、135、136、137、138、139、1440、147、148、150、151、152、157、158、159、172、178、182、183、184、187、188、195、197、198

    中国广电号段

    192

    其他号段

    14号段部分为上网卡专属号段:中国联通145,中国移动147,中国电信149

    虚拟运营商:

    电信:1700、1701、1702、162
    移动:1703、1705、1706、165
    联通:1704、1707、1708、1709、171、167
    卫星通信:1349、174
    物联网:140、141、144、146、148

    通过以上号段可以看出,手机号码起始1,第二位是3456789中的任意一个,第三位有的是0-9全段,有的只是部分,如下:

    13和18开头的手机号是全段

    13开头的手机号是全段:13 [0123456789] 比如130,131,132…139
    18开头的手机号是全段:18[0123456789] 比如180,181,182…189

    15和19开头的手机号后面除4外都有,无154和194

    15 [012356789] 比如150,151,152,153,155…159
    19 [012356789] 比如190,191,192,193,195…159

    17开头的手机号后面除9外都有

    17 [01235678] 比如170,171,172,173…178

    14开头的手机号除2,3外都有,无142和143

    14[01456879] 比如140,141,144,145…149

    16开头的手机号后面只有2567

    16[2567] 比如:162,165,166,167

    了解了运营商的最新号段,下面就写出手机号验证的最新正则表达式

    /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
    

    在javascript中的示例:

    <script>
    	var reg_user = /^[\u4e00-\u9fa5]{2,4}$/;    //2-4个中文字符正则
    	var reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;    //11位手机号码正则
    	function checkSubmit() {
    		if (document.form.user.value =="") {
    			alert("姓名不能为空!");
    			document.form.user.focus();
    			return false;
    		} else if (!reg_user.test(document.form.user.value)) {
    			alert("姓名只能为2-4中文!");
    			document.form.user.focus();
    			document.form.user.select();
    			return false;
    		}
    		if (document.form.tel.value =="") {
    			alert("请填写您的手机号码!");
    			document.form.tel.focus();
    			document.form.tel.select();
    			return false;
    		} else if (!reg_tel.test(document.form.tel.value)) {
    			alert("请正确填写您的手机号码!");
    			document.form.tel.focus();
    			document.form.tel.select();
    			return false;
    		}
    	}
    </script>
    

    因为手机号都是以1开始的,所以也可以这样写:

    /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/
    

    这是把所有运营商号段写在一起的,包括虚拟运营商、物联网等,大家也可以根据项目需求来写。


    表单字段验证常用正则表达式

    1、姓名

    /^[\u4e00-\u9fa5]{2,4}$/    //2-4个中文字符正则
    

    2、手机号码

    /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
    

    3、座机号码

    /^(0\d{2,3})-?(\d{7,8})$/
    

    4、电子邮箱

    /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
    

    5、身份证号码
    (1)普通校验

    /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
    

    (2)精准校验
    18位

     /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
    

    15位

    /^[1-9]\d{5}\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$/
    

    后6位

     /^(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
    

    6、QQ号码

    /^[1-9][0-9]\d{4,9}$/
    

    7、邮政编码

    /^[1-9]\d{5}$/
    

    8、注册账号

    /^[a-zA-Z][a-zA-Z0-9_]{4,15}$/
    
    展开全文
  • 中文正则表达式匹配-正则中文匹配

    万次阅读 多人点赞 2018-05-30 17:13:44
    原文链接:http://caibaojian.com/zhongwen-regexp.html这篇文章主要讲如何使用正则匹配中文字符,中文正则表达式的匹配规则不像其他正则规则一样容易记住,下面一起看看这个中文正则表达式是怎么样的。\w匹配的仅仅...
    原文链接:
    http://caibaojian.com/zhongwen-regexp.html
    

    这篇文章主要讲如何使用正则匹配中文字符,中文正则表达式的匹配规则不像其他正则规则一样容易记住,下面一起看看这个中文正则表达式是怎么样的。

    \w匹配的仅仅是中文,数字,字母,对于国人来讲,仅匹配中文时常会用到,见下

    匹配中文字符的正则表达式: [\u4e00-\u9fa5]

    或许你也需要匹配双字节字符,中文也是双字节的字符

    匹配双字节字符(包括汉字在内):[^\x00-\xff]

    注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

    更多常用正则表达式匹配规则:

    英文字母:[a-zA-Z]
    
    数字:[0-9]

    匹配中文,英文字母和数字及_:

    //code from http://caibaojian.com/zhongwen-regexp.html
    ^[\u4e00-\u9fa5_a-zA-Z0-9]+$

    同时判断输入长度:·

    [\u4e00-\u9fa5_a-zA-Z0-9_]{4,10}
    
    ^[\w\u4E00-\u9FA5\uF900-\uFA2D]*$

    1、一个正则表达式,只含有汉字、数字、字母、下划线不能以下划线开头和结尾:

    ^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$

    其中:

    ^ 与字符串开始的地方匹配

    (?!_)  不能以_开头
    
    (?!.*?_$)  不能以_结尾
    
    [a-zA-Z0-9_\u4e00-\u9fa5]+  至少一个汉字、数字、字母、下划线

    $  与字符串结束的地方匹配

    放在程序里前面加@,否则需要\\进行转义 @"^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$"
    
    (或者:@"^(?!_)\w*(?<!_)$" 或者 @" ^[\u4E00-\u9FA50-9a-zA-Z_]+$ " )

    2、只含有汉字、数字、字母、下划线,下划线位置不限:

    ^[a-zA-Z0-9_\u4e00-\u9fa5]+$

    3、由数字、26个英文字母或者下划线组成的字符串

    ^\w+$

    4、2~4个汉字

    @"^[\u4E00-\u9FA5]{2,4}$";

    5、

    ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

    用:(Abc)+ 来分析: XYZAbcAbcAbcXYZAbcAb


    来源: 前端开发博客
    展开全文
  • 正则表达式

    万次阅读 多人点赞 2018-07-08 11:15:29
    一、概念正则表达式()

    在很多技术领域(如:自然语言处理,数据存储等),正则表达式可以很方便的提取我们想要的信息,所以正则表达式是一个很重要的知识点!

    一、概念

    正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。

    正则表达式目前被集成到了各种文本编辑器/文本处理工具当中

    二、应用场景

    (1)验证:表单提交时,进行用户名密码的验证。

    (2)查找:从大量信息中快速提取指定内容,在一批url中,查找指定url。

    (3)替换:将指定格式的文本进行正则匹配查找,找到之后进行特定替换。

    三、基本要素

    (1)字符类

    (2)数量限定符

    (3)位置限定符

    (4)特殊符号

    注意:正则表达式基本是与语言无关的,我们可以结合语言/工具与正则表达式进行文本处理,在后面的博客中,我将使用grep来进行验证。(grep是一款Linux下按行匹配文本的工具,如下,使我们常使用的两个选项)

    -E:使用扩展正则匹配

    --color:将匹配得到的内容进行语法高亮

    1.字符类


    举例如下:

    例1:


    注意:1.grep采用的贪心匹配,它会匹配当前行中的所有匹配内容

    2.echo $?表示是否匹配成功(如果成功返回值为0,不成功返回值为1)

    例2:


    例3:


    例4:


    例5:


    2.数量限定符


    举例如下:

    例1:


    例2:


    由此,我们可以看出,“前面的单元”默认是指?或+前面的字符

    例3:


    例4:


    例5:


    例6:


    注意:该结果为匹配失败,在相关文档中并未出现,应该啊是错误或者废弃的用法

    例7:


    3.位置限定符


    举例如下:

    例1:


    例2:


    例3:


    例4:


    例5:


    例6:


    4.特殊符号


    举例如下:


    假如我们去掉-E选项,会有什么现象呢?


    此时,不难发现,去掉-E选项之后没有进行正常的正则匹配,这种现象需要我们引入如下的两个概念!

    5.基本正则表达式&扩展正则表达式

    区别:正则表达式的扩展正则(Extended规范)和基本正则(Basic规范)下,有些字符应该解释为普通字符,要表示上述特殊含义则需要加“\”转义字符。反之,在扩展规范下,应被理解为特殊含义,要取其字面值,也要对其进行“\”转义。

    因此,grep工具带上-E选项,表示使用扩展正则来进行匹配,若没有该选项,则表示使用基准正则来进行匹配。

    对于上述的问题,我们举例如下:

    例1:


    例2:当目标字符串当中本身就包含了字符,要想进行正则匹配,应该这样做:


    例3:


    5.其他普通字符集及其替换


    举个例子:


    综上,正则表达式有以下三个分类:

    (1)基本正则表达式:Basic即BPEs

    (2)扩展正则表达式:Extended即EREs

    (3)Perl的正则表达式:PREs

    因此,当grep指令不跟任何参数时,表示要使用BREs,后面跟“-E”表示使用EREs,后面跟“-P”参数,表示使用PREs

    四、贪婪模式与非贪婪模式

    1.贪婪模式:正则表达式匹配时,会尽量多的匹配符合条件的内容

    举例如下:


    注意:grep默认采用贪婪匹配,可能会对我们的测试结果造成干扰,大家可以上网使用“正则在线转换工具”进行测试

    2.非贪婪模式:正则表达式匹配时,会尽量少的匹配符合条件的内容,也就是说,一旦发现匹配符合要求,立马就匹配成功,而不会继续匹配下去(除非有g,开启下一组匹配)

    举例如下:


    五、零宽断言

    1.所谓断言,是用来声明一个应该为真的事实。在正则表达式中,只有当断言为真时才会继续进行匹配。

    2.零宽断言:像用于查找某些内容之前或者之后的东西,其中一些特殊字符如“\b、^、$”等用于指定一个位置,这个位置应满足一定的条件。

    3.分类:

    (1)零宽度正预测先行断言(?=exp)

    它断言自身出现的位置之后能匹配的表达式exp。如:\b\w+(?=ing\b),表示匹配以ing结尾的单词的前面的部分(除ing以外的部分)。当我们要查找“I'm singing while you're dancing.”时,它会匹配sing和danc

    举例如下:


    (2)零宽度正回顾后发断言(?>=exp)

    它断言自身出现的位置的前面能匹配的表达式exp。如:(?<=\bre)\w+\b会匹配以re开头的单词的后半部分(除er以外的部分),例如:在查找“reading a book”时,它匹配ading

    举例如下:


    六、简单练习

    1.手机号码


    2.非零的正整数


    3.非零开头的最多带两位小数的数字


    4.由数字和26位字母组成的字符串


    5.QQ号,从10000开始


    6.IP地址

    \d+\.\d+\.\d+\.\d+

    7.判断账号是否合法

    ^[a-zA-Z0-9][a-zA-Z0-9_]{4,15}$

    8.日期格式

    ^\d{4}-\d{1,2}-\d{1,2}

    正则表达式的学习就到这里结束啦,如果有小伙伴没有看明白的,可以上网查询正则的更多知识点!


    展开全文
  • 正则表达式正则表达式.zip
  • Python正则表达式,这一篇就够了!

    万次阅读 多人点赞 2020-04-02 15:35:55
    之前我们讲解了 正则表达式 的起源、发展、流派、语法、引擎、优化等相关知识,今天我们主要来学习一下 正则表达式在 Python语言 中的应用! 大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是...

    之前我们讲解了 正则表达式 的起源、发展、流派、语法、引擎、优化等相关知识,今天我们主要来学习一下 正则表达式在 Python语言 中的应用

    大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中关于 正则表达式的函数。
    在这里插入图片描述

    一、re模块简介

    聊到Python正则表达式的支持,首先肯定会想到re库,这是一个Python处理文本的标准库

    标准库的意思表示这是一个Python内置模块,不需要额外下载,目前Python内置模块大概有300个。可以在这里查看Python所有的内置模块:https://docs.python.org/3/py-modindex.html#cap-r

    因为re是内置模块,所以不需要再下载,使用时直接引入即可:

    import re
    

    re模块主要定义了9个常量、12个函数、1个异常,每个常量和函数猪哥都会通过实际代码案例讲解,让大家能更直观的了解其作用!

    注:为避免出现代码格式错乱,猪哥尽量使用代码截图演示哦。

    re模块官方文档:https://docs.python.org/zh-cn/3.8/library/re.html
    re模块库源码:https://github.com/python/cpython/blob/3.8/Lib/re.py

    二、re模块常量

    常量即表示不可更改的变量,一般用于做标记。

    re模块中有9个常量,常量的值都是int类型!
    在这里插入图片描述
    上图我们可以看到,所有的常量都是在RegexFlag枚举类来实现,这是在Python 3.6做的改版。在Python 3.6以前版本是直接将常量写在re.py中,使用枚举的好处就是方便管理和使用!
    在这里插入图片描述

    下面我们来快速学习这些常量的作用及如何使用他们,按常用度排序!

    1. IGNORECASE

    语法: re.IGNORECASE 或简写为 re.I

    作用: 进行忽略大小写匹配。

    代码案例:
    在这里插入图片描述
    在默认匹配模式下大写字母B无法匹配小写字母b,而在 忽略大小写 模式下是可以的。

    2. ASCII

    语法: re.ASCII 或简写为 re.A

    作用: 顾名思义,ASCII表示ASCII码的意思,让 \w, \W, \b, \B, \d, \D, \s\S 只匹配ASCII,而不是Unicode。

    代码案例:
    在这里插入图片描述
    在默认匹配模式下\w+匹配到了所有字符串,而在ASCII模式下,只匹配到了a、b、c(ASCII编码支持的字符)。

    注意:这只对字符串匹配模式有效,对字节匹配模式无效。

    3. DOTALL

    语法: re.DOTALL 或简写为 re.S

    作用: DOT表示.,ALL表示所有,连起来就是.匹配所有,包括换行符\n默认模式下.是不能匹配行符\n

    代码案例:
    在这里插入图片描述
    在默认匹配模式下.并没有匹配换行符\n,而是将字符串分开匹配;而在re.DOTALL模式下,换行符\n与字符串一起被匹配到。

    注意:默认匹配模式下.并不会匹配换行符\n

    4. MULTILINE

    语法: re.MULTILINE 或简写为 re.M

    作用: 多行模式,当某字符串中有换行符\n,默认模式下是不支持换行符特性的,比如:行开头 和 行结尾,而多行模式下是支持匹配行开头的。

    代码案例:
    在这里插入图片描述
    正则表达式中^表示匹配行的开头,默认模式下它只能匹配字符串的开头;而在多行模式下,它还可以匹配 换行符\n后面的字符。

    注意:正则语法中^匹配行开头、\A匹配字符串开头,单行模式下它两效果一致,多行模式下\A不能识别\n

    5. VERBOSE

    语法: re.VERBOSE 或简写为 re.X

    作用: 详细模式,可以在正则表达式中加注解!

    代码案例:
    在这里插入图片描述
    默认模式下并不能识别正则表达式中的注释,而详细模式是可以识别的。

    当一个正则表达式十分复杂的时候,详细模式或许能为你提供另一种注释方式,但它不应该成为炫技的手段,建议谨慎考虑后使用!

    6.LOCALE

    语法: re.LOCALE 或简写为 re.L

    作用: 由当前语言区域决定 \w, \W, \b, \B 和大小写敏感匹配,这个标记只能对byte样式有效。这个标记官方已经不推荐使用,因为语言区域机制很不可靠,它一次只能处理一个 "习惯”,而且只对8位字节有效。

    注意: 由于这个标记官方已经不推荐使用,而且猪哥也没使用过,所以就不给出实际的案例!

    7.UNICODE

    语法: re.UNICODE 或简写为 re.U

    作用: 与 ASCII 模式类似,匹配unicode编码支持的字符,但是 Python 3 默认字符串已经是Unicode,所以有点冗余。

    8. DEBUG

    语法: re.DEBUG

    作用: 显示编译时的debug信息。

    代码案例:
    在这里插入图片描述

    虽然debug模式下确实会打印编译信息,但猪哥并不理解这是什么语言 以及表达的含义,希望了解的朋友能不吝赐教。

    9.TEMPLATE

    语法: re.TEMPLATE 或简写为 re.T

    作用: 猪哥也没搞懂TEMPLATE的具体用处,源码注释中写着:disable backtracking(禁用回溯),有了解的同学可以留言告知!
    在这里插入图片描述

    10. 常量总结

    1. 9个常量中,前5个(IGNORECASE、ASCII、DOTALL、MULTILINE、VERBOSE)有用处,两个(LOCALE、UNICODE)官方不建议使用、两个(TEMPLATE、DEBUG)试验性功能,不能依赖。
    2. 常量在re常用函数中都可以使用,查看源码可得知。在这里插入图片描述
    3. 常量可叠加使用,因为常量值都是2的幂次方值,所以是可以叠加使用的,叠加时请使用 | 符号,请勿使用+ 符号!在这里插入图片描述

    最后来一张思维导图总结一下re模块中的常量吧。
    在这里插入图片描述

    三、re模块函数

    re模块有12个函数,猪哥将以功能分类来讲解;这样更具有比较性,同时也方便记忆。

    1.查找一个匹配项

    查找并返回一个匹配项的函数有3个:search、match、fullmatch,他们的区别分别是:

    1. search: 查找任意位置的匹配项
    2. match: 必须从字符串开头匹配
    3. fullmatch: 整个字符串与正则完全匹配

    我们再来根据实际的代码案例比较:

    案例1:
    在这里插入图片描述
    案例1中search函数是在字符串中任意位置匹配,只要有符合正则表达式的字符串就匹配成功,其实有两个匹配项,但search函数值返回一个。

    match函数是要从头开始匹配,而字符串开头多了个字母a,所以无法匹配,fullmatch函数需要完全相同,故也不匹配!

    案例2:
    在这里插入图片描述
    案例2删除了text最开头的字母a,这样match函数就可以匹配啦,而fullmatch函数依然不能完全匹配!

    案例3:
    在这里插入图片描述
    案例3中,我们只留下一段文字,并且与正则表达式一致;这时fullmatch函数终于可以匹配了。

    完整案例:
    在这里插入图片描述
    注意:查找 一个匹配项 返回的都是一个匹配对象(Match)。

    2.查找多个匹配项

    讲完查找一项,现在来看看查找多项吧,查找多项函数主要有:findall函数finditer函数

    1. findall: 从字符串任意位置查找,返回一个列表
    2. finditer:从字符串任意位置查找,返回一个迭代器

    两个方法基本类似,只不过一个是返回列表,一个是返回迭代器。我们知道列表是一次性生成在内存中,而迭代器是需要使用时一点一点生成出来的,内存使用更优。

    在这里插入图片描述
    如果可能存在大量的匹配项的话,建议使用finditer函数,一般情况使用findall函数基本没啥影响。

    3.分割

    re.split(pattern, string, maxsplit=0, flags=0) 函数:用 pattern 分开 string , maxsplit表示最多进行分割次数, flags表示模式,就是上面我们讲解的常量!

    在这里插入图片描述
    注意:str模块也有一个 split函数 ,那这两个函数该怎么选呢?
    str.split函数功能简单,不支持正则分割,而re.split支持正则。

    关于二者的速度如何? 猪哥实际测试一下,在相同数据量的情况下使用re.split函数与str.split函数执行次数执行时间 对比图:
    在这里插入图片描述
    通过上图对比发现,1000次循环以内str.split函数更快,而循环次数1000次以上后re.split函数明显更快,而且次数越多差距越大!

    所以结论是:在 不需要正则支持 且 数据量和数次不多 的情况下使用str.split函数更合适,反之则使用re.split函数。

    注:具体执行时间与测试数据有关!

    4.替换

    替换主要有sub函数subn函数,他们功能类似!

    先来看看sub函数的用法:

    re.sub(pattern, repl, string, count=0, flags=0) 函数参数讲解:repl替换掉string中被pattern匹配的字符, count表示最大替换次数,flags表示正则表达式的常量。

    值得注意的是:sub函数中的入参:repl替换内容既可以是字符串,也可以是一个函数哦! 如果repl为函数时,只能有一个入参:Match匹配对象。

    在这里插入图片描述

    re.subn(pattern, repl, string, count=0, flags=0) 函数与 re.sub函数 功能一致,只不过返回一个元组 (字符串, 替换次数)。
    在这里插入图片描述

    5.编译正则对象

    compile函数template函数 将正则表达式的样式编译为一个 正则表达式对象 (正则对象Pattern),这个对象与re模块有同样的正则函数(后面我们会讲解Pattern正则对象)。
    在这里插入图片描述
    template函数compile函数 类似,只不过是增加了我们之前说的re.TEMPLATE 模式,我们可以看看源码。
    在这里插入图片描述

    6.其他

    re.escape(pattern) 可以转义正则表达式中具有特殊含义的字符,比如:. 或者 * ,举个实际的案例:
    在这里插入图片描述
    re.escape(pattern) 看似非常好用省去了我们自己加转义,但是使用它很容易出现转义错误的问题,所以并不建议使用它转义,而建议大家自己手动转义!

    re.purge() 函数作用就是清除 正则表达式缓存,具体有什么缓存呢?我们来看看源码就知道它背地里干了 什么:
    在这里插入图片描述
    看方法大概是清除缓存吧,我们再来看看具体的案例:
    在这里插入图片描述
    猪哥在两个案例之间使用了re.purge() 函数清除缓存,然后分别比较前后案例源码里面的缓存,看看是否有变化!
    在这里插入图片描述

    7.总结

    同样最后来一张思维导图总结一下re模块中的函数吧。
    在这里插入图片描述

    四、re模块异常

    re模块还包含了一个正则表达式的编译错误,当我们给出的正则表达式是一个无效的表达式(就是表达式本身有问题)时,就会raise一个异常!

    我们来看看具体的案例吧:
    在这里插入图片描述
    上图案例中我们可以看到,在编写正则表达式中我们多写了一个括号,这导致执行结果报错;而且是在其他所有案例执行之前,所以说明是在正则表达式编译时期就报错了。

    注意:这个异常一定是 正则表达式 本身是无效的,与要匹配的字符串无关!

    五、正则对象Pattern

    关于re模块的常量、函数、异常我们都讲解完毕,但是完全有必要再讲讲正则对象Pattern

    1. 与re模块 函数一致

    re模块的函数中有一个重要的函数 compile函数 ,这个函数可以预编译返回一个正则对象,此正则对象拥有与re模块相同的函数,我们来看看Pattern类的源码。
    在这里插入图片描述
    既然是一致的,那到底该用re模块 还是 正则对象Pattern

    而且,有些同学可能看过re模块的源码,你会发现其实compile函数 与 其他 re函数(search、split、sub等等) 内部调用的是同一个函数,最终还是调用正则对象的函数!
    在这里插入图片描述
    也就是说下面 两种代码写法 底层实现 其实是一致的:

    # re函数
    re.search(pattern, text)
    
    # 正则对象函数
    compile = re.compile(pattern)
    compile.search(text)
    

    那还有必要使用compile函数 得到正则对象再去调用 search函数 吗?直接调用re.search 是不是就可以?

    2. 官方文档怎么说

    关于到底该用re模块 还是 正则对象Pattern ,官方文档是否有说明呢?

    在这里插入图片描述
    官方文档推荐:在多次使用某个正则表达式时推荐使用正则对象Pattern 以增加复用性,因为通过 re.compile(pattern) 编译后的模块级函数会被缓存!

    3. 实际测试又如何?

    上面官方文档推荐我们在 多次使用某个正则表达式时使用正则对象,那实际情况真的是这样的吗?

    我们在实测一下吧

    在这里插入图片描述
    猪哥编写了两个函数,一个使用re.search函数 另一个使用 compile.search函数 ,分别(不同时)循环执行count次(count从1-1万),比较两者的耗时!

    得出的结果猪哥绘制成折线图:
    在这里插入图片描述
    得出的结论是:100次循环以内两者的速度基本一致,当超出100次后,使用 正则对象Pattern 的函数 耗时明显更短,所以比re模块 要快!

    通过实际测试得知:Python 官方文档推荐 多次使用某个正则表达式时使用正则对象函数 基本属实!

    六、注意事项

    Python 正则表达式知识基本讲解完毕,最后稍微给大家提一提需要注意的点。

    1.字节串 与 字符串

    模式和被搜索的字符串既可以是 Unicode 字符串 (str) ,也可以是8位字节串 (bytes)。 但是,Unicode 字符串与8位字节串不能混用!

    2.r 的作用

    正则表达式使用反斜杠(’’)来表示特殊形式,或者把特殊字符转义成普通字符。

    而反斜杠在普通的 Python 字符串里也有相同的作用,所以就产生了冲突。

    解决办法是对于正则表达式样式使用 Python 的原始字符串表示法;在带有 ‘r’ 前缀的字符串字面值中,反斜杠不必做任何特殊处理。

    3.正则查找函数 返回匹配对象

    查找一个匹配项(search、match、fullmatch)的函数返回值都是一个 匹配对象Match ,需要通过match.group() 获取匹配值,这个很容易忘记。
    在这里插入图片描述
    另外还需要注意:match.group()match.groups() 函数的差别!

    4.重复使用某个正则

    如果要重复使用某个正则表达式,推荐先使用 re.compile(pattern)函数 返回一个正则对象,然后复用这个正则对象,这样会更快!

    5.Python 正则面试

    笔试可能会遇到需要使用Python正则表达式,不过不会太难的,大家只要记住那几个方法的区别,会正确使用,基本问题不大。

    是否对Python的正则表达式有了一个清晰的了解呢?

    展开全文
  • 正则表达式一. python正则表达式介绍二. re模块2.1 match方法2.2 匹配规则2.2.1 匹配字符2.2.2 分组匹配2.2.3 限定匹配字符规则2.2.4 转义字符三. re中的编译函数3.1 compile方法3.2 search方法3.3 finall方法3.4 ...
  • 前端正则判断前端正则判断。前端正则判断前端正则判断。前端正则判断前端正则判断。前端正则判断前端正则判断。前端正则判断前端正则判断。前端正则判断前端正则判断。
  • 正则表达式,正则表达式,正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式
  • hive 正则表达式详解

    万次阅读 2016-04-09 18:56:22
    hive中的正则表达式还是很强大的。数据工作者平时也离不开正则表达式。对此,特意做了个hive正则表达式的小结。所有代码都经过亲测,正常运行。1.regexp语法: A REGEXP B 操作类型: strings 描述: 功能与RLIKE相同...
  • 正则表达式验证Ip地址(绝对正确)

    万次阅读 多人点赞 2016-02-04 16:39:51
    之前一直不太会写正则表达式,很多要用到正则表达式的都直接百度,像上次要用正则表达式验证是否是合法的ip地址,然后就上网找,结果就是没找到一个对的,今天就为大家贡献一下,写个对的,并做一下解析。...
  • pytorch实现L2和L1正则化regularization的方法

    万次阅读 多人点赞 2019-03-14 16:44:27
    pytorch实现L2和L1正则化的方法 目录 目录 pytorch实现L2和L1正则化的方法 1.torch.optim优化器实现L2正则化 2. 如何判断正则化作用了模型? 2.1 未加入正则化loss和Accuracy 2.1 加入正则化loss和Accuracy ...
  • 正则表达式应用正则表达式正则表达式正则表达式正则表达式正则表达式
  • 正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式
  • 正则表达式正则表达式正则表达式正则表达式正则表达式
  • 正则表达式正则表达式正则表达式正则表达式
  • 自动生成正则式,对正则式进行检验,很好的工具~ 自动生成正则式,对正则式进行检验,很好的工具~ 自动生成正则式,对正则式进行检验,很好的工具~ 自动生成正则式,对正则式进行检验,很好的工具~
  • 正则,测试器正则测试器正则测试器正则测试器正则测试器
  • Java 正则表达式

    万次阅读 多人点赞 2018-08-31 23:08:12
    前段时间使用Java的正则表达式做一些字符串匹配的任务,现将学到的正则表达式的知识整理成文。 Java中Spring.class涉及到正则表达式。如Spring.split(), matches(),replaceAll()等方法。 Java中更一般使用正则...
  • 正则指引书籍

    2018-04-23 22:59:36
    正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式
  • java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式
  • Asp.net 正则表达式 正则 正则表达式 正则表达式下载 正则下载 Asp.net 正则表达式下载

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 969,651
精华内容 387,860
关键字:

正则