python学习基础篇——初识正则表达式

        正则表达式 :小型 高度专业化的编程语言 ,可以为想要匹配的字符串 指定相应的规则; python中的正则表达式可以被编译成字节码 由C编写的匹配引擎执行。初识部分设计 字符匹配中 正则表达式规则的编写过程。

# 正则表达式 import re
# 编译正则表达式 re.compile()
# re.I 可以实现规则中字母大小写均可匹配。


# 字符匹配:普通字符 元字符
# 元字符包含  . ^ $ * + ? {} [] \ | | ()
# [] 用在规则中常用来指定一个字符串集,任何一个字符都可以拿来匹配[abc]/[a-z],
# 	 元字符在其中不起作用[asd$] 
# 	 补集匹配不在区间范围内的字符[^ac] 除了ac,剩下的所有
# ^ 用在规则中通常用来匹配行首 放在字符串首部 ^+string
# $ 用在规则中用来匹配行尾 放在字符串尾部 string+$
# \ 转义字符 后加不同的字符表示不同的特殊意义
# 也可以用来取消所有的元字符 \\ \[
# \d 匹配任何十进制相当于[0-9]
# \D 匹配任何非数字字符 相当于[^0-9]
# \s 匹配任何空白字符 相当于[\t\n\r\f\v]
# \S 匹配任何非空白字符 相当于[^\t\n\r\f\v]
# \w 匹配任何字母 数字字符 相当于[a-zA-Z0-9]
# \W 匹配任何非字母 数字字符 相当于[^a-zA-Z0-9]
# 重复
# {} 规则{数字}表示将前面的规则重复多少次
# * 表示将前面规则重复匹配零次或多次
# + 表示将前面规则重复匹配一次或多次
# ? 表示将前面规则重复匹配零次或一次 ,可用来标识某事物是可选的
# 贪婪模式 :做最大匹配 r = r"ab+"  或者 r = r"ab+"
# 非贪婪模式 :做最小匹配 r = r"ab?" 
# . 匹配除换行符意外的所有单个字符 如:r = r"a.b" 可以匹配 acb , adb,不能匹配 asdb
# () 将位于()内的内容当作一个整体。


import re 
# s= "abc"
s= r"abc" # 用r保持字符串的原意

# re.findall(pattern, string, flags=0)  Return a list of all non-overlapping matches in the string.
# 拿字符串与规则进行比较,返回字符串与规则相同的字符串
re.findall(s,"aaaaaaaaaaaaaaaaaaaaaa") # [] 返回为空
print(re.findall(s,"aaaaaaaaaabcaaaabcaa")) # ['abc', 'abc']

st = "top tip tqp typ tep"
res = r"top"
print(re.findall(res,st)) # ['top']

# []
res2 = r"t[io]p"  # i,o
print(re.findall(res2,st)) # ['top', 'tip']

resn = r"t[a-z]p" # a到z [0-9]即0到9 [A-Z]
print(re.findall(resn,st)) # ['top', 'tip', 'tqp', 'typ', 'tep']

resc = r"t[^oi]p" # 除了oi剩下所有
print(re.findall(resc,st)) # ['tqp', 'typ', 'tep']

# ^ 

str = "hello world , hello boy"
r = r"hello" # 规则
print(re.findall(r,str)) # ['hello', 'hello']
r1 = r"^hello" 
print(re.findall(r1,str)) # ['hello'] 只匹配存在与行首的符合规则的字符串,如果开通没有 返回空

# $ 

rs = r"boy$"
print(re.findall(rs,str)) # ['boy']
# 元字符在[]中不起作用[asd$] ,只是将元字符当作了一个普通符号处理。
r3 = r"t[abc$]"
print(re.findall(r3,"ta")) # ['ta']
print(re.findall(r3,"tbwer")) # ['tb']

print(re.findall(r3,"t$sdgregergs"))  # ['t$']
r3 = r"t[abc^]"
print(re.findall(r3,"tsdgt^gergs")) # ['t^']

#…………………………………………………………………… \ …………………………………………………………………………………………………………

r=r"\^abc"
print(re.findall(r," abc ^abc ^ abc")) # ['^abc']
r=r"\w"
print(re.findall(r," ASdh123#$^%^")) # ['A', 'S','d', 'h', '1', '2', '3']

#……………………………………………………………………  重复 …………………………………………………………………………………………………………
# {}指定正则表达式的一部分重复次数
tle = "010-12345678"
r = r"^010-\d\d\d\d\d\d\d\d" # 重复匹配8次
print(re.findall(r,"010-1234567"))  # []
print(re.findall(r,"010-12345678")) # ['010-12345678']

# {} 
r = r"^010-\d{8}" 
print(re.findall(r,"010-12345678"))# ['010-12345678']

# * 
# + 
# ? 
r = r"ab*"
print(re.findall(r,"aababbbbbbb")) # ['a', 'ab', 'abbbbbbb']
r = r"ab+"
print(re.findall(r,"aababbbbbbb")) # ['ab', 'abbbbbbb']
r = r"ab?"
print(re.findall(r,"aababbbbbbb")) # ['a', 'ab', 'ab']
r = r"^010-?\d{8}" # 标识带区号的电话号码输入 - 作为可选输入
print(re.findall(r,"01087654321"))  # ['01087654321']

# 编译正则表达式 re.compile() 成为一个正则对象使用 可以调用正则表达式的所有内部函数
r1 = r"^010-?\d{8}$" # 北京的电话号码规则
BJ_tel= re.compile(r1)
print(BJ_tel.findall("01064838347")) # ['01064838347']

# re.I 
name_re = re.compile(r"snowy",re.I)
print(name_re.findall("Snowy")) # ['Snowy']

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值