Python 正则表达式小结1

[声明]:本文参考了白夜黑雨老师的网页讲解。如有侵权,请与我联系!!!

1. 正则表达式验证

提供两个网站用于正则表达式的验证,可以敲入文本与正则表达式。通过该网站,验证正则表达式的正确性。非常好用!
英文网站
中文网站

2. 特殊元字符及含义

元字符含义
.表示要匹配除了 换行符 之外的任何 单个 字符
*星号-表示匹配前面的表达式任意次,包括0次
+表示重复匹配前面的表达式一次或者多次,不包括0次
?表示匹配前面的子表达式0次或者1次
\对字符的转义
[ ]匹配几个字符之一
^表示匹配文档的开头位置
$表示匹配文本的结尾
{ }匹配指定次数
|表示匹配其中之一
( )括号称之为正则表达式的组选择
贪婪模式和非贪婪模式?的使用
单行模式和多行模式多行模式 re.MULTILINE 或者re.M
使用 . 来匹配换行使用DOTALL函数
DOTALL函数的使用使用 . 来匹配换行符

3 匹配某种字符类型

反斜杠后面接一些字符,表示匹配 某种类型 的一个字符。比如

\d 匹配0-9之间任意一个数字字符,等价于表达式 [0-9]

\D 匹配任意一个不是0-9之间的数字字符,等价于表达式 [^0-9]

\s 匹配任意一个空白字符,包括 空格、tab、换行符等,等价于表达式 [\t\n\r\f\v]

\S 匹配任意一个非空白字符,等价于表达式 [^ \t\n\r\f\v]

\w 匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式 [a-zA-Z0-9_]

缺省情况也包括 Unicode文字字符,如果指定 ASCII 码标记,则只包括ASCII字母

\W 匹配任意一个非文字字符,等价于表达式 [^a-zA-Z0-9_]

反斜杠也可以用在方括号里面,比如 [\s,.] 表示匹配 : 任何空白字符, 或者逗号,或者点

4. 正则表达式举例

import re
content = '''苹果, 是绿色的
橙子, 是橙色
香蕉, 是黄色的
墙壁, 是白色的的的的的的
西瓜.是绿色的
乌鸦, 是黑色的'''
source = '<html><head><title>Title<title>'
source2 = '''韩立
上官婉儿
银月
Felix
宝花圣祖'''
source3 = 'a1b2c3d4e5.'
print("welcome back Felix")
p = re.compile(r'.色') # r 指类型为字符串类型,compile的用法是指将正则表达式编译为pattern对象
for one in p.findall(content):
    print(one)
print('finish . test')

p1 = re.compile(r'.色的*') # * 表示匹配前面的子表达式任意次,包括0次
for one in p1.findall(content):
    print(one)
print('finish * test')

p2 = re.compile(r'.色的+') # + 表示匹配前面的子表达式一次或者多次,不包括0次
for one in p2.findall(content):
    print(one)
print('finish + test')

p3 = re.compile(r', .?') # ? 表示匹配前面的子表达式0次或者1次
for one in p3.findall(content):
    print(one)
print('finish ? test')

p4 = re.compile(r'.色的{1,3}') # {3}/{3,4} 表示匹配指定次数
for one in p4.findall(content):
    print(one)
print('finish {} test')

p5 = re.compile(r'<.*?>') #非贪婪模式
for one in p5.findall(source):
    print(one)
print('finish 贪婪模式 test')

p6 = re.compile(r'.*\.')  # 转义字符
for one in p6.findall(content):
    print(one)
print('finish 转义字符 test')

p7 = re.compile(r'\w{2,6}', re.A)  # 匹配字符类型
for one in p7.findall(source2):
    print(one)
print('finish 匹配字符类型 test')

p8 = re.compile(r'[^\d]') #[]表示匹配其中之一,[akm.]表示匹配a或者k或者m或者.
for one in p8.findall(source3):
    print(one)
print('finish [] test')

source4 = '''001-苹果价格-60
002-橙子价格-70
003-香蕉价格-80'''
p9 = re.compile(r'^\d+', re.M) # ^ 只会匹配文本的开始位置,这里需要使用多行模式
for one in p9.findall(source4):
    print(one)
print('finish ^ test')

p10 = re.compile(r'\d+$', re.MULTILINE)
for one in p10.findall(source4):
    print(one)
print('finish $ test')

p11 = re.compile(r'绿色|橙') # | 表示匹配其中之一,|在正则表达式的优先级是最低的
for one in p11.findall(content):
    print(one)
print('finish | test')

p12 = re.compile(r'^(.*),', re.M) # ()分组,
for one in p12.findall(content):
    print(one)
print('finish () test')

source4 = '''张三,手机号码15945678901
李四,手机号码13945677701
王二,手机号码13845666901'''
p13 = re.compile(r'^(.+),.+(\d{11})', re.MULTILINE)
for one in p13.findall(source4): #findall 返回一个列表,每个列表是一个元组
    print(one)
print('finish () test2')

p14 = re.compile(r'^(?P<name>.+),.+(?P<phone>\d{11})', re.MULTILINE) #使用(?P<分组名>...) 给分组命名
for match in p14.finditer(source4):
    print(match)
    print(match.group('name'))
    print(match.group('phone'))

大收藏家说

正则表达式对于文本内容提取,脚本编写,有非常强大的应用。在学校时候我就想学习下,奈何那会资源有限,无法系统的学习,现在掌握了,非常开心!!!
最近很喜欢高瓴资本的张磊说的一番话:
选择比努力重要,与谁同行比要去的远方更重要!
最本质的价值,实际上还是长期主义,你如果看的短,什么事都很难办,你稍微一拉长,很多事就看明白了!
流水不争先,争的是滔滔不绝呀!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值