'''
正则表达式(regex、regexp或RE)
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串

re模块
'''
'''
\f    匹配一个换页符。
\n    匹配一个换行符。
\r    匹配一个回车符。
\s    匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]。
\S    匹配任何非空白字符。等价于 [^\f\n\r\t\v]。
\t    匹配一个制表符。
\d    匹配一个数字字符。等价于 [0-9]。
\D    匹配一个非数字字符。等价于 [^0-9]。
\w    匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
\W    匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。

^    匹配输入字符串的开始位置。
$    匹配输入字符串的结尾位置。
*    匹配前面的子表达式零次或多次。
+    匹配前面的子表达式一次或多次。
.    匹配除换行符 \n 之外的任何单字符。
?    匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
    当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的
    非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
    例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
[]    中括号表达式。
    [xyz]    字符集合。匹配所包含的任意一个字符。
    [^xyz]  非字符集合。匹配未包含的任意字符 。
    [a-z]   字符范围。[^a-z]
{}    限定符表达式。
    {n}    n 是一个非负整数。匹配确定的 n 次。
    {n,}    n 是一个非负整数。至少匹配n 次。
    {n,m}    m 和 n 均为非负整数,最少匹配 n 次且最多匹配 m 次。
\    将下一个字符标记为或特殊字符\n,\\
|    指明两项之间的一个选择,'z|food' 能匹配 "z" 或 "food"


正则表达式运算优先级
\                            转义符
(), (?:), (?=), []            圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}    限定符
^, $, \任何元字符、任何字符    定位点和序列(即:位置和顺序)
|                            替换,"或"操作
'''

'''
模拟手机、身份证号、网址、邮箱
'''
import re


# 模拟手机号匹配
def mimePhone():
    # 我的手机号
    phonePattern = "1[3578]\d{9}"
    resobj = re.match(phonePattern, "13912345678")
    resobj = re.match(phonePattern, "14912345678")
    resobj = re.match(phonePattern, "1399123456")
    print(resobj)


# 我的身份证号
def mimeID():
    # phonePattern = "[^0]\d{16}[\dX]"
    phonePattern = "[^0]\d{5}((19)|(20))\d{2}((0[1-9])|(1[0-2]))((0[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))\d{3}[\dX]"
    resobj = re.match(phonePattern, "123456789012345678")
    resobj = re.match(phonePattern, "12345678901234567X")
    resobj = re.match(phonePattern, "02345678901234567X")
    resobj = re.match(phonePattern, "1234567890124567X")
    resobj = re.match(phonePattern, "12345619991231678X")
    print(resobj)


# 我的网址
def mimeUrl():
    phonePattern = "http(s?)://[^\^@~\*]*.[(com)|(cn)]$"  # 我们的逻辑是:http(s)://跟任意多个【非^@~*】
    resobj = re.match(phonePattern, "http://abcd12345.com")
    resobj = re.match(phonePattern, "http://[email protected]")
    resobj = re.match(phonePattern, "http://abcd12345^.com")
    resobj = re.match(phonePattern, "http://abcd12345~.com")
    resobj = re.match(phonePattern, "http://abcd12345.cm")
    print(resobj)


# 我的邮箱
def mimeMailbox():
    # phonePattern = "^[a-zA-Z0-9][\w]*@[\w]*\.[\w\.]*$"
    phonePattern = "^[a-zA-Z0-9][a-zA-Z0-9_]*@[a-zA-Z0-9_]*\.[a-zA-Z0-9_\.]*$"  #
    resobj = re.match(phonePattern, "[email protected]")
    resobj = re.match(phonePattern, "[email protected]")
    resobj = re.match(phonePattern, "12345678@qqcom")
    resobj = re.match(phonePattern, "12345你妹[email protected]")
    print(resobj)


if __name__ == "__main__":
    # mimePhone()
    # mimeID()
    # mimeUrl()
    # mimeMailbox()

    print("main over")

results matching ""

    No results matching ""