美文网首页
python正则表达式

python正则表达式

作者: Byte猫 | 来源:发表于2019-05-09 15:25 被阅读0次

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。
re 模块使 Python 语言拥有全部的正则表达式功能。

#-*- coding:utf-8 -*-
import re
'''
正则表达式会搜索匹配特定模式的语句,非常实用
'''
#========================================================
#  Level1:基本语句
#  4种定位标记:锚点、数量符、运算符、字符类
#========================================================

# 1、锚点:^和$
'''
^ 代表开头
$ 代表结尾
xyz 类似这样不加括号的文本代表特定的字符串
'''
print('LV1.1----------------------')
string11 = 'this is'
result11 = re.findall('^this', string11, flags=0)  # 匹配开头的this
result12 = re.findall('is$', string11, flags=0)  # 匹配末尾的is
result13 = re.findall('is', string11, flags=0)  # 匹配所有的is
string12 = '2004-959-559 # 这是一个国外电话号码'
result14 = re.sub(r'#.*$', "", string12)  # 删除字符串中的 Python注释 
print(result11)
print(result12)
print(result13)
print(result14)

# 2、数量符:*、+、?和 {}
'''
*  大于等于0个数量---贪婪(贪心) 
+  至少1次---占有
?  至多1次---懒惰(勉强)
*?  懒惰限定符,重复0次或更多次但尽量少重复
+?  懒惰限定符,重复1次或更多次但尽量少重复
??  懒惰限定符,重复0次或1次但尽可能少重复
c{2} 两个c
c{2,} 两个或更多个c
c{2,5} 两个到5个c
{n,m}?  重复n到m次,但尽可能少重复
{n,}?  懒惰限定符,重复n次以上但尽可能少重复
'''
print('LV1.2----------------------')
string21 = '18155825579'
result21 = re.findall('1[3-8]\d{9}', string21, flags=0)  # ab开头,后面有两个以上c
string22 = 'aaaaaaaa'
result22 = re.findall('a{1,}?', string22, flags=0)
print(result21)
print(result22)

# 3、或运算符:|
print('LV1.3----------------------')
'''
a|b  a或者b
'''
string31 = 'typejb5shtypeabab'
result31 = re.findall('type=1|ab', string31, flags=0)
print(result31)

# 4、字符类:d、w、s 和 .
print('LV1.4----------------------')
'''
\d  匹配数字 =[0-9]
\D  匹配非数字 =[^0-9]
\w  匹配非特殊字符,即a-z、A-Z、0-9、_、汉字 =[a-zA-Z0-9]
\W  匹配特殊字符,即非字母、非数字、非汉字、非_ =[^\w]
\s  匹配空白(包括空格、换行、tab缩进等)  =[_\r\t\n\f]
\S  匹配非空白 =[^\s]
\.  匹配任意1个字符(除了\n)
'''
string41 = '嫦娥1号,$10$290'
result41 = re.findall('嫦娥\d号', string41, flags=0)
result42 = re.findall('\$\d+', string41, flags=0)   # 匹配前面有$符号的数字,因为$已经有含义一定要加转义!
print(result41)
print(result42)

#========================================================
#  Level2:中级语句
#========================================================

# 1、分组和捕获:()
print('LV2.1----------------------')
'''
()表示捕获分组,只输出捕获到的值
(?:)表示非捕获分组,区别在于不会只输出捕获到的值
'''
string51 = '1234abc123ABC'
result51 = re.findall('(\d+)[a-z]+(\d+)', string51, flags=0)
result52 = re.findall('(?:\d+)[a-z]+(?:\d+)', string51, flags=0)
print(result51)
print(result52)

# 2、方括弧表达式:[]
print('LV2.2----------------------')
'''
[abc]  匹配一个a、b或c,同a|b|c
[a-c]  匹配一个a、b或c,同a|b|c
[a-fA-F0-9]  匹配一个代表16进制数字的字符,不区分大小写
[^a-zA-Z]  不在[]中的字符,其中^为否定表达式。左侧含义是匹配一个不带a到z或A到Z的字符
注意:在方括弧内,所有特殊字符(包括反斜杠)都会失去它们应有的意义。
'''
string61 = '<div>1234abc</div>'
result61 = re.findall('\d{3,}[a-z]', string61, flags=0)
result62 = re.findall('<div>(\d+[a-z]{3})</div>', string61, flags=0)
result63 = re.findall('[^a-z<>/]+', string61, flags=0)  # 匹配不是a-z,<,>,/的内容
print(result61)
print(result62)
print(result63)

#========================================================
#  Level3:高级语句
#========================================================

# 1、边界符B
print('LV3.1----------------------')
'''
\b 不会消耗任何字符只匹配一个位置,常用于匹配单词边界(单词划分以空格为基础,既然没有空格,必然没有两个单词)
\B 匹配不是单词开头或结束的位置
总结:^ 和 $ 是描述整个字符串的边界,\b 和 \B 是描述字符串中的单词边界
'''
string71 = 'hover ve'
result71 = re.findall(r'^\w+\s\bve\b', string71, flags=0)
string72 = 'hover'
result72 = re.findall(r'^.+\Bve\B', string72, flags=0)
print(result71)
print(result72)

# 2、前向匹配和后向匹配:(?=) 和 (?<=)
'''
d(?=r)    只有在后面跟着r的时候才匹配d,但是r并不会成为整个正则表达式匹配的一部分
(?<=r)d   只有在前面跟着r时才匹配d,但是r并不会成为整个正则表达式匹配的一部分
d(?!r)    只有在后面不跟着r的时候才匹配d,但是r并不会成为整个正则表达式匹配的一部分
(?<!r)d   只有在前面不跟着r时才匹配d,但是r并不会成为整个正则表达式匹配的一部分
'''
print('LV3.2----------------------')
string81 = 'exp1exp2exp1'
result81 = re.findall('exp1(?=exp2)', string81, flags=0)  # 查找exp2前面的exp1
result82 = re.findall('(?<=exp2)exp1', string81, flags=0)  # 查找exp2后面的exp1
string82 = '<div>1234abc</div><div>2234abc</div>'
result83 = re.findall('(?<=<div>).*?(?=</div>)', string82, flags=0)
print(result81)
print(result82)
print(result83)

相关文章

  • 正则表达式

    Python正则表达式初识(一) Python正则表达式初识(二) Python正则表达式初识(三) Python...

  • 正则表达式

    Python:正则表达式Python:正则表达式

  • Python正则表达式指南

    Python正则表达式指南 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • [转]python正则表达式(一) 函数使用

    原文:python | 史上最全的正则表达式 更全的正则表达式处理函数:在python中使用正则表达式(一) 0....

  • Python正则表达式

    python正则表达式

  • Python正则表达式用法详解

    搞懂Python 正则表达式用法 Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一...

  • Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例...

  • Python处理正则表达式超时的办法

    title: Python处理正则表达式超时的办法tags: [python3, 正则表达式超时, re模块]da...

网友评论

      本文标题:python正则表达式

      本文链接:https://www.haomeiwen.com/subject/emiwoqtx.html