python 正则-常见题目

1、邮箱

print(re.findall(r'[\w-]+@[\w-]+\.[\w-]+', '[email protected]'))

2、身份证号

xxxxxx yyyy MM dd 375 0 十八位

	print(re.findall(r'(?:18|19|(?:[23]\d))\d{2}', '2010')) # 年
    print(re.findall(r'(?:0[1-9])|10|11|12', '11')) # 月
    print(re.findall(r'(?:[0-2][1-9])|10|20|30|31', '10')) # 日
    pattern = re.compile(r"[1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|10|11|12)(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]")
    print(pattern.findall('342623198910235163'))

3、国内手机号码

#手机号都为11位,且以1开头,第二位一般为3、5、6、7、8、9 ,剩下9位任意数字
# 例如:13987692110、15610098778
print(re.findall(r'1(?:3|5|6|7|8|9)\d{9}', '15610098778')) #
    print(re.findall(r'1[356789]\d{9}', '15610098778')) #

4、国内固定电话

#区号34位,号码78位 例如:0511-1234567、021-87654321

print(re.findall(r'\d{3,4}-?\d{7,8}', '0511-1234567')) #
    print(re.findall(r'\d{3,4}-?\d{7,8}', '05111234567')) #

5、域名

pattern =   re.compile(r"(?:(?:http:\/\/)|(?:https:\/\/))?(?:[\w](?:[\w\-]{0,61}[\w])?\.)+[a-zA-Z]{2,6}(?:\/)")
    print(pattern.findall("Python官网的网址是https://www.python.org/"))

6、IP地址

# IP地址的长度为32位(共有2^32个IP地址),分为4段,每段8位,用十进制数字表示
# 每段数字范围为0~255,段与段之间用句点隔开 
pattern =   re.compile(r"(?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d)")
    print(pattern.findall("675.255.255.255"))
    print(pattern.findall("2.25.25.255"))
    print(pattern.findall("0.0.25.255"))

7、日期

常见日期格式:yyyyMMdd、yyyy-MM-dd、yyyy/MM/dd、yyyy.MM.dd
# 2013-10-01

pattern = re.compile(r"(?:(?:1\d{3})|(?:20[0-2][0-4]))[-/\.](?:0[1-9]|10|11|12)[-/\.](?:0[1-9]|1\d|2\d|3[0-1])")
    print(pattern.findall("出生日期是1999-11-28"))

8、密码

# 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)
pattern = re.compile("[a-zA-Z]\w{5,17}")
    print(pattern.findall("密码: nlj20*_cc2042 "))

#强密码(以字母开头,必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)

pattern = re.compile("^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,10}")
    print(pattern.findall("nlj00NLJ"))

9、中文字符

pattern = re.compile(r"[\u4e00-\u9fa5]")
    print(pattern.findall("apple:苹果"))

10、数字

    pattern = re.compile(r"\b[0-9]+\b")
    print(pattern.findall("1234 899 niu 890 009 nihih _ 9090"))




    # 验证n位的数字:^\d{n}$
    pattern = re.compile(r"\b[0-9]{3}\b")
    print(pattern.findall("1234 899 niu 890 009 nihih _ 9090"))

    # 验证至少n位数字:^\d{n,}$
    pattern = re.compile(r"\b\d{3,}\b")
    print(pattern.findall("1234 899 niu 890 009 nihih _ 9090"))

    # 验证m-n位的数字:^\d{m,n}$
    pattern = re.compile(r"\b\d{3,5}\b")
    print(pattern.findall("1234 899 niu 890 009 nihih _ 909000"))

    # 验证零和非零开头的数字:^(0|[1-9][0-9]*)$
    pattern = re.compile(r"\b[1-9]\d*\b") # 非0开头的数字
    print(pattern.findall("1234 899 niu 890 009 nihih _ 909000"))

    pattern = re.compile(r"\b0\d*\b") # 非0开头的数字
    print(pattern.findall("1234 899 niu 890 009 nihih _ 909000"))

    # 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
    pattern = re.compile(r"\b[0-9]+(?:\.\d{2})\b") # 非0开头的数字
    print(pattern.findall("1234 899 niu 890.01 009 nihih _ 909000"))




    # 验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
    pattern = re.compile(r"\b[0-9]+(?:\.\d{1,3})\b") # 非0开头的数字
    print(pattern.findall("1234 899 niu 890.01 009 nihih _ 909000"))



    # 验证非零的正整数:^\+?[1-9][0-9]*$
    pattern = re.compile(r"\b[1-9][0-9]*\b") # 非0开头的数字
    print(pattern.findall("1234 899 niu 890.01 009 nihih _ 909000"))

    # 验证非零的负整数:^\-[1-9][0-9]*$
    pattern = re.compile(r"-[1-9][0-9]*\b") # 非0开头的数字
    print(pattern.findall("1234 -899 niu 890.01 009 nihih _ -909000"))

11、字符串


    pattern = re.compile(r"[a-zA-Z0-9]+") # 非0开头的数字
    print(pattern.findall("1234 -899 niu 890.01 009 nihih _ -909000"))


    # 长度为3-20的所有字符:^.{3,20}$
    pattern = re.compile(r".{3,20}\b") # 非0开头的数字
    print(pattern.findall("1234mn"))

12、如何匹配一个字符串中的所有包含两个连续的相同字母的单词?

matches = re.findall(r'\b(\w*(\w)\2\w*)\b', 'hello world book balloon oop')
    for match in matches:
        print(match[0])

你可能感兴趣的:(python基础,python)