正则表达

一、正则表达式

  1、正则表达式(Regular Expression 或 regex 或 re):是对字符串操作的一种逻辑公式。一般使用正则表达式对字符串进行匹配和过滤。

    优点:灵活,功能性强,逻辑性强。

    缺点:上手难。

    工具:各大文本编辑器都有正则匹配功能。在线测试工具:http://tool.chinaz.com/regex/

  2、正则表达式是由普通字符和元字符组成。普通字符包含大小写字母,数字。在匹配普通字符的时候可以直接写。

    (1)字符组:

      字符组是用 [ ] 括起来,在 [ ] 中出现的内容会被匹配 。例如[abc] 匹配a或b或c 

      如果字符组中的内容过多还可以使用-,例如:[a-z]匹配a-z之间所有的字母 , [0-9]匹配所有阿拉伯数字

    (2)简单的元字符

      .:匹配除换行符以外的任意字符

      \w:匹配字母、数字、下划线

      \s:匹配任意的空白符

      \d:匹配所有的数字

      \n:匹配一个换行符

      \t:匹配一个制表符

      \b:匹配一个单词的结尾

      \W:匹配非字母、数字、下划线

      \S:匹配非空白字符

      \D:匹配非数字

      a|b:匹配a或b

      ( ) :匹配空号内的表达式,也表示一个组

      [...]:匹配字符组中的字符

      [^...]:匹配除了字符组中字符的所有字符

 

    (3)量词:可以一次性匹配多个字符

      *:重复零次或多次

      +:重复一次或更多次

      ?:重复零次或一次

      {n}:重复n次

      {n,} :重复n次到更多次

      {n,m}:重复n次到m次

 

    (4)惰性匹配和贪婪匹配

      惰性匹配:.+?     ----->尽可能的少匹配到结果

str:张无忌喜欢周芷若.
reg:张无忌.*?

#此时匹配的是张无忌


str:<div>周芷若</div>
reg: <.*>
#结果:<div>周芷若</div>


str:<div>周芷若</div>
reg: <.*?>
#:结果:
<div>
</div>


str:<div>周芷若</div>
reg: <(div|/div*)?>
#:结果:
<div>
</div>

        .*?x的特殊含义  找到下一个为止。

str:abcdefgxhijklmn
reg:.*?x
#结果:abcdefgx

 

      贪婪匹配:* + {}    ----->尽可能多的匹配到结果。

str:张无忌昨天去找周芷若了。
reg:张无忌.*

此时匹配的是整句话

 

     (5)分组:

      在正则中使用()进行分组。例如匹配15位和18位的身份证。

以下是正则:
^[1-9]\d{14}(\d{2}[0-9x])?$
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$

 

    (6)转义

      在正则表达式中,有很多特殊意义的元字符,比如\n和\s的等,如果要在正则中匹配正常的“\n”而不是“换行符”就需要对“\”进行转义,变成“\\”。在python中,无论是正则表达式还是待匹配的内容,都是一字符串的形式出现的,在字符串中"\"也有特殊的含义,本身还是需要转义。所以若果需要匹配一次"\n",字符串中就要写成"\\n",那么在正则中就要写成"\\\\n",这样就太麻烦了,这是可以用r'\n'。此时的正则式r"\\n"就可以了。

 

二、校验数字的表达式

  1、数字:^[0-9]*$

  2、n位的数字:^\d{n}$

  3、至少n位的数字:^\d(n,)$

  4、m-n位的数字:^\d{m,n}$

  5、零和非零开头的数字:^(0|[1-9][0-9]*)$

  6、非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$

  7、带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$

  8、正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$

  9、有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$

  10、有1-3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$

  11、 非零的正整数:^[1-9]\d*$  或  ^([1-9][0-9]*){1,3}$  或  ^\+?[1-9]*$

  12、非零的负整数:^\-[1-9][0-9]*$  或  ^-[1-9]\d*$

  13、非负整数:^\d+$  或  ^[1-9]\d*|0$

  14、非正整数:^-[1-9]\d*|0$  或  ^((-\d+)|(0+))$

  15、非负浮点数:^\d+(\.\d+)?$

  16、非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$

  17、正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$

  18 、负浮点数:^-([1-9]\d*\.\d|0\.\d*[1-9]\d*)$

  19、浮点数:^(-?\d+)(\.\d+)?$

 

三、校验字符的表达式:

  1、汉字:^[\u4e00-\u9fa5]{0,}$

  2、英文和数字:^[0-9a-zA-Z]+$或^[0-9a-zA-Z]{4,40}$

  3、长度位3-20的所有字符:^.{3,20}$

  4、由26个英文字母组成的字符串:^[a-zA-Z]+$

  5、由26个大写英文字母组成的字符串:^[A-Z]+$

  6、由26个小写英文字母组成的字符串:^[a-z]$

  7、由数字和26个英文字母组成的字符串:^[0-9a-zA-Z]+$

  8、由数字、26个英文字母或者下划线组成的字符串:^\w+%或^\w{3,20}$

  9、中文、英文、数字包括下划线组成的字符串:^[\u4E00-\u9FA50-9a-zA-Z_]+$

  10、中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA50-9a-zA-Z]+$

  11、可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+

  12、进制输入含有~的字符:[^~\x22]+

 

四、特殊需求表达式:

  1、Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

  2、域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?

  3、InternetURL:[a-zA-Z0-9]+://[^\s]*或^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

  4、手机号码和座机号:1[3-9]\d{9}   或者 ^(\(\d{3,4}-)|\d{3,4}-)?\d{7,8}$  或者(国内) \d{3}-\d{8}|\d{4}-\d{7}

  5、 身份证号码(15位、18位): (^\d{15}$)|(^\d{18}|(^\d{17}(\d|X|x))$)

  6、账号是否合法(字母开头,允许5-16字节,允许字母下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

  7、密码(以字母开头、长度在6~18之间,只能包含字母、数字、下划线):^[a-zA-Z]\w{5,17}$

  8、强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$

  9、 强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

  10、日期格式:^\d{4}-\d{1,2}-\d{1,2}  或 ^[1-9]\d{0,3}-(1[0-2]|0?[1-9])-(3[01]|[12]\d|0?[1-9])$

  11、一年的12个月(01-09和1-12):^(0?[1-9]|1[0-2])$

  12、一个月的31天(01-09和1-31):^((0?[1-9])|((1|2)[0-9])|30|31)$

  13、钱的输入格式:  

    1. 有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
    2. 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
    3. 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
    4. 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
    5. 必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
    6. 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
    7. 这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
    8. 1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}  (,[0-9]{3})*)(.[0-9]{1,2})?$
    9. 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

  14、xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X]|[m|M]|[l|L]

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

  16、双字节字符:[^\x00-\xff]

  17、空白行的正则表达式:\n\s*\r

  18、HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*?/>  (首尾空白字符的正则表达式:^\s*|\s*$或者(^\s*)|(\s*$))

  19、腾讯QQ账号:[1-9][0-9]{4,11} 或 [1-9]\d{4,11}

  20、中国邮政编码:[1-9]\d{5}(?!\d)

  21、IP地址:((?:(?:25[0-5]|[2-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))

 

转载于:https://www.cnblogs.com/LW-5208/articles/9490814.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值