《Python正则表达式》--逻辑公式<1>

# 正则表达式
# 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”

#
# ==========================================================================

import re

msg = "娜扎热巴戴斯佟丽娅"
pattern = re.compile("娜扎") # compile————编译
result = pattern.match(msg) # 没有匹配 # pattern 模式


print(result)

# 使用正则 re 模块方法:match

s = "娜扎热巴戴斯佟丽娅"

result = re.match("佟丽娅", s) # match 从头开始匹配,如果匹配不成功就返回 None
print(result)

result = re.search("佟丽娅", s) # search 进行正则字符串匹配方法,匹配的是整个字符串
print(result)
# span 返回的位置
print(result.span()) # 返回位置
print(result.group()) # 使用group 提取到匹配的内容
print(result.groups()) # 返回一个空元组
================================================================================================

# 正则的符号: []
# ①a2b h6k
# ②a88a a7878a
# []表示一个范围
# search 只要匹配到,后面就不会继续进行检索
# findall 匹配整个字符串,找到一个继续向下找,一直找到字符串结尾

s = "哈哈3a"

result = re.search("[0-9][a-z]", s) # <re.Match object; span=(2, 3), match='3'>

msg1 = "abcd7vjkfd8hdf00"
# search # 只能返回一个结果
result1 = re.search("[a-z][0-9][a-z]", msg1)
print(result)
# findall # 会一直匹配到字符串的结尾
result2 = re.findall("[a-z][0-9][a-z]", msg1)
print(result2)


================================================================================================

# "."用于匹配除换行符(\n)之外的所有字符
# "^" 用于匹配字符串的开始,即行首
# "$" 用于匹配字符串的末尾(末尾如果有换行符\n,就匹配\n前面的那个字符),即行尾


# 定义正则验证次数: *+?
# "*" 用于将前面的模式匹配0次或多次(贪婪模式,尽可能多的匹配) >=0
# "+" 用于将前面的模式匹配1次或多次(贪婪模式) >= 1
# "?" 用于将前面的模式匹配0次或1次(贪婪模式)
# "*?, +?, ??" 及上面三种特殊字符的非贪婪模式(尽可能少的匹配)
# "{m}" 用于验证将前面的模式匹配m次
# "{m,}" 用于验证将前面的模式匹配 m次或者多次 >= m
# "{m,n}" 用于将前面的模式匹配 m次到 n次(贪婪模式),即最小匹配 m次,最大匹配 n次。 大于等于m,小于等于n
# "{m,n}?" 即上面 "{m,n}" 的非贪婪版本


# \A: 表示从字符串的开始出匹配
# \Z: 表示从字符串的借书处匹配,如果存在换行,只匹配到换行前的结束字符串
# \b: 匹配一个单词边界,也就是指单词和空格间的位置。 例如"py\b"可以匹配"python"中的"py",但不能匹配
# "openpyxl"中的"py"
# \B: 匹配非单词边界。 "py\b" 可以匹配 "openpyxl" 中的"py",但是不能匹配"python 中的 py"
# \d: 匹配任意数字,等价于[0-9] todo digit
# \D: 匹配任意非数字字符,等价于[^\d] TODO ^写在[]表示 非 大写表示非
# \s: 匹配任意空白字符,等价于[\t\n\r\f] TODO space
# \S: 匹配任意非空白字符,等价于[^\s]
# \w: 匹配任意字符数字及下划线,等价于[^\w]
# \\: 匹配原意的反斜杠 \

==================================================================================================

msg2 = "a2bkdsh6kikdja88aiia7878a"

result = re.findall("[a-z][0-9]+[a-z]", msg2)
print(result)


==================================================================================================
# QQ号码验证 5-11位
qq = "654654683"
result = re.match("^[1-9][0-9]{4,10}$", qq)
print(result)

==================================================================================================

import re

# 用户名可以是字母或者数字,不能是数字开头,用户名长度必须是6位以上
username = "admin001"
result = re.match("^[a-zA-Z]\w{5,}$", username) # [0-9a-zA-Z] 等价于 \w
print(result)

# $ 的作用 一直匹配到结尾

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# \b的练习
msg = "aa.py a*.py ab.txt bb.py kk.png uu.py apyb.txt"
result = re.findall(r"\w+\.py\b", msg) # \b 注意反斜杠的转义 \将.进行转义 用+ 不能用 *
print(result)
============================================================================================

########
# 总结:
# """
# . 除\n之外的任意字符
# ^ 开头
# $ 结尾
# []范围 [a-z]
#
# 正则预定义
# \s 空白(空格)
# \b 边界
# \d 数字
# \w word [0-9a-zA-Z_]
# 大写反面 \S 非空格 \D 非数字
# "\w[0-9]" ----> \w [0-9] 只能匹配一个字母


# 量词
# * >=0
# + >=1
# ? 0, 1
#
# """

phone = "13752412345"
# 手机号码正则:
result = re.match("1[35879]\d{9}$", phone)
print(result)

# {m} 固定m位
# {m,} >=m
# {m,n} 大于等于 m 小于等于 n

============================================================================

posted @ 2021-03-26 16:02  我的莴苣不给你吃  阅读(318)  评论(0)    收藏  举报