首页 > 技术文章 > 正则表达式

ArtisticMonk 2018-05-19 18:28 原文

# """
# Author:Cairo
# """
#
# 一、匹配单个字符
#     \d:匹配单个数字
#     \D:匹配单个非数字
#     \w:匹配单个字母或者数字或下划线
#     \W:匹配单个字母或者数字或者下划线以外的字符
#     \s:匹配单个不可见的字符,例如:\w\s\-\s\d匹配a - 3.(匹配的是空格)
#     \S:匹配一个可见的字符
#      .:匹配任意一个字符,例如\w.\d 匹配1~3.
#     \.:匹配字符“.”
# 二、匹配多个字符
#     *:匹配任意数量字符
# 三、匹配范围
#     [xyz]:匹配xyz中任意的一个字符
#     [^xyz]:匹配非xyz字符
#     [x|y]:匹配其中任意一个字符
#     (xxx|jjj):匹配其中任意一个字符串
#     [a-z]:匹配a-z的范围
#     [^a-z]:匹配a-z以外的范围
# 四、匹配数量
#     ?:0-1个前方子表达式。例如\w?\d匹配a3和3。
#     +:数量大于0个前方子表达式。例如:/s+ 表示至少一个空格。
#     {n}:前方子表达式数量为n次。
#     {n,}:前方子表达式数量至少为n次。
#     {n,m}:前方子表达式数量至少为n次,最多为m次。
# 五、匹配首尾字符
#     ^:匹配字符串起始单个字符,后方紧随首个字符或表达式。
#     $:匹配字符串末尾单个字符,前方紧随末尾字符或表达式。
#     \b:匹配单词边界,即字符串末尾字符串。例如:er\b匹配player。
#     \B:匹配非单词边界,即字符串末尾之前的字符串。例如:er\B匹配error
# 六、特殊匹配
#     \:转义字符
#     \f:匹配一个换页符
#     \n:匹配一个换行符
#     \r:匹配一个回车符
#     \t:匹配一个制表符
#     \v:匹配一个垂直制表符
# 七、零宽度断言
# 零宽度断言是一种零宽度的匹配,它匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置。
# 它的作用是给指定位置添加一个限定条件,用来规定此位置之前或者之后的字符必须满足限定条件才能使正则中的字表达式匹配成功。
#     (?!表达式):向后匹配一个字符,如果不是表达式对应的字符,则匹配成功。
#     (?=表达式):向后匹配一个字符,如果是表达式对应的字符,则匹配成功。
#     (?<=表达式):向前匹配一个字符,如果是表达式对应的字符,则匹配成功。
#     (?<!表达式):向前匹配一个字符,如果不是表达式对应的字符,则匹配成功。
# 另外,补充一点,如果想获取到零宽度断言匹配成功的字符,需要在断言后方填写表示单个字符的表达式,例如:(?!,).表示字符不是“,”则获取。
#
#
# 等价字符:
#     ?等价于匹配长度{0,1}
#     *等价于匹配长度{0,}
#     +等价于匹配长度{1,}
#     \d等价于[0-9]
#     \D等价于[^0-9]
#     \w等价于[A-Za-z_0-9]
#     \W等价于[^A-Za-z_0-9]
#
#
# 常用运算符与表达式:
#     ^:字符串开始
#     $:字符串结尾
#     ():域段/组(group),能够将匹配表达式的字符临时保存,并通过函数group(args)获取。
#     []:包含,默认是一个字符长度
#     [^]:不包含,默认是一个字符长度
#     {n,m}:匹配长度
#     .:任何单个字符
#     |:或
#     \:转义
#     [A-Z]:26个大写字母
#     [a-z]:26个小写字母
#     [0-9]:0至9数字
#     [A-Za-z0-9]:26个大写字母、26个小写字母和0至9数字
#     ,:分割,例如:[A,H,T,W] 包含字母A或H或T或W;[a,h,t,w] 包含字母a或h或t或w;[0,3,6,8] 包含数字0或3或6或8。
#
import re
# def phone(phone_re):
#     rephone = '^1[4,3,5,7,8,6]\d{9}'
#     if re.match(rephone,phone_re):
#         print("正确的号码!!!")
#     else:
#         print("号码不存在!!!")
# phone("1342173104")

# 首位字符为1:表达式需要写入“^1”;
# 第2位字符是“3、4、5、7、8”之一:表达式需要写入“[3,4,5,7,8]”;
# 其余9位是数字:表达式需要写入“\d{9}”;
# 号码长度为11位:表达式需要写入“$”(如果不写入“$”超出11位依然能够匹配,而不是精确匹配)。
# 把上面每一部分连到一起就是完整的正则表达式。

# re.I/re.IGNORECASE:忽略大小写。
# re.L/re.LOCALE:让\w、\W、\b、\B、\s和\S依赖当前的区域语言设定。
# re.M/re.MULTILINE:影响’^’和’$’的行为,指定后,’^’会增加匹配每行的开始(即换行符后的位置);’$’会增加匹配每行的结束(即换行符前的位置)。
# re.S/re.DOTALL:影响’.’的行为,指定后,可以匹配换行符。
# re.U/re.UNICODE:让\w、\W、\b、\B、\d、\D、\s和\S依赖Unicode库。
# re.X/re.VERBOSE:指定后,忽略所有空白字符(方括号内以及被反斜杠转义的除外);而且,在每行中“#”号后的所有字符也将被忽略(既能够在正则表达式内部写注释)。
#

def ID_numbeer(ID):
    numbeer = '^44088\d19\d\d[0-1]\d[0-3]\d{4}\w'
    if re.match(numbeer,ID):
        print("匹配到身份证!!!")
    else:
        print("匹配不到!!!")
ID_numbeer('44088219951815678d')

#
#
#
#
#
#
#
# http://www.opython.com/350.html
#
#
#
#
#
#
#
#



^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$   //匹配负整数
^-?[1-9]\d*$   //匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0) #

 

推荐阅读