关闭

python与正则表达式

标签: python正则表达式regex
119人阅读 评论(0) 收藏 举报
分类:

正则表达式

推荐一本书:《Sams Teach Yourself Regular Expressions in 10 Minutes》。
下面列举常用的regex元字符。

元字符 作用
. 任意字符匹配
\ 转义特殊字符
[ ] 使用[和]来包含一个字符集合,代表和其中任意一个成员匹配的文本
\w 字母、数字
\d 数字
( ) 常常用于子表达式的构建
\E 结束\L或\U的转换
\U 将\U和\E之间的字符全部转换成大写字符
\L 将\L和\E之间的字符全部转换成小写字符
\u 将\u后面的字符或者子集变成大写字符
\l 将\l后面的字符或者子集变成小写字符
[\b] 回退删除 backspace
\f 换页
\n 换行
\r 回车
\t 制表符 tab
\v 垂直制表符
\s 空白符
\b 匹配着这样的位置:位于一个能构成单词的字符(字母,数字,下划线。\w)和不能构成单词的字符(\W)之间对于cat scatter文本,\bcat\b仅仅匹配第一个单词cat
* 匹配0个或者多个
+ 匹配至少一个
{n,m} 匹配n到m个

贪婪型元字符 懒惰型元字符
* *?
+ +?
{n,} {n,}?


书中提到的正则表达式测试器,可下载:http://www.forta.com/books/0672325667/
是一个很棒的用于练习正则表达式的文本工具。

正则表达式在python中的应用

正则表达式模式匹配

正则表达式模块re是python自带的。
基本步骤:

  • 导入re库
  • 创建Regex对象
  • 搜索并返回match对象
  • 返回匹配的字符串
  • >>> import re
    >>> regex = re.compile(r"\d{3}-\d{3}-\d{4}")
    >>> match = regex.search('231-345-8972')
    >>> print(match.group())
    231-345-8972

    正则分组

    通过group返回正则分组

    >>> import re
    >>> regEx = re.compile(r'(\d{3})-(\d{3})-(\d{4})')
    >>> mo = regEx.search('231-345-8972')
    >>> mo.group(1)
    '231'
    >>> mo.group(2)
    '345'
    >>> mo.group(3)
    '8972'
    >>> mo.group(0)
    '231-345-8972'
    >>> 

    返回所有的分组

    >>> mo.groups()
    ('231', '345', '8972')

    正则表达式的贪心和非贪心

    ?在正则表达式中可以表示可选,也能表示非贪心匹配。

    #! /usr/bin/python
    import re
    batRegex = re.compile(r'(Ha){3,5}')
    mo = batRegex.search('HaHaHaHaHa')
    print(mo.group())
    
    batRegex = re.compile(r'(Ha){3,5}?')
    mo = batRegex.search('HaHaHaHaHa')
    print(mo.group())

    执行:

    [edemon@CentOS workspace]$ ./regex.py 
    HaHaHaHaHa
    HaHaHa

    regex对象的search和findall

    search方法在找到第一个匹配的内容后即停止了工作,但是findall会返回所有的字符串,以list的形式供我们处理。

    #! /usr/bin/python
    import re
    text = '''231-345-8972
    213-324-5476'''
    print("origin text is:\n"+text)
    
    regex = re.compile(r'\d{3}-\d{3}-\d{4}')
    mo = regex.search(text)
    print("search result is:" + str(mo.group()))
    
    rlist = regex.findall(text)
    print("findall result is:" + str(rlist))

    运行效果:

    [edemon@CentOS workspace]$ ./regex.py 
    origin text is:
    231-345-8972
    213-324-5476
    search result is:231-345-8972
    findall result is:['231-345-8972', '213-324-5476']

    常用字符分类缩写

    分类字符 表示
    \d 0-9的任何数字
    \D 除0-9的数字以外的字符
    \w 字母、数字、下划线字符
    \W 除字母、数字、下划线以外的任何字符
    \s 空白字符(空格、制表符、换行符)
    \S 除空白字符以外的字符

    匹配换行

    如果使得re.DOTALL作为re.compile()第二个参数,那么.将匹配所有的字符,包括换行。

    re.DOTALL
    Make the ‘.’ special character match any character at all, including a newline; without this flag, ‘.’ will match anything except a newline.

    不区分大小写的匹配

    给re.compile()传入第二个参数re.IGNORECASE或re.I则不理会字母的大小写。
    如下:

    import re
    text = 'Hello World'
    mo = re.compile('hello world',re.I)
    print(mo.search(text).group())
    
    # Hello World

    VERBOSE

    compile的flag: re.VERBOSE可使得正则表达式中的注释、多余空白字符都被忽略。这样增强了阅读性。



    更多的应用技巧,需要靠实践掌握了。

    0
    0
    查看评论
    发表评论
    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

    Python爬虫包 BeautifulSoup 学习(九) 正则表达式与Lambda表达式

    本文使用的HTML在文章的最后,经过了一些简化,源文件在链接。正则表达式正则表达式的用法可以查看之前的文章,一般来说如果用python自带的urllib、urllib2库写爬虫的基本都会用到大量的正则...
    • u013007900
    • u013007900
    • 2017-01-24 10:41
    • 1365

    Python 正则表达式里面 贪婪模式和非贪婪模式的区别

    贪婪模式 :匹配到了,继续往下走,看看剩下的还没有可以匹配的, 非贪婪模式: 匹配到了,就不继续往下走了. 比如    贪婪模式 源字符串    aa11bb22cc 正则表达式    .* 输出...
    • qq_33447462
    • qq_33447462
    • 2016-05-24 00:16
    • 2635

    python 正则表达式 groups和group有什么区别

    为什么 m = re.match("([abc])+", "abc") print m.groups() 返回的只有('c',) 而不是 abc 而 print m.group() 就能返回整个的字...
    • hzliyaya
    • hzliyaya
    • 2015-08-13 19:39
    • 1889

    Python培训基础教程-正则表达式2

    • 2013-08-07 13:45
    • 273KB
    • 下载

    Python使用正则表达式以及gensim查找相似地址的算法

    • 2017-10-13 10:28
    • 34KB
    • 下载

    Python正则表达式操作指南.doc

    • 2009-09-07 13:30
    • 292KB
    • 下载

    PYTHON正则表达式

    • 2009-02-17 13:10
    • 248KB
    • 下载

    Python正则表达式基础

    • 2016-03-01 13:59
    • 985KB
    • 下载

    Python正则表达式总结

    • 2012-04-16 20:17
    • 1.20MB
    • 下载

    很详细的Python正则表达式操作指南(re使用)

    • 2017-12-05 16:26
    • 64KB
    • 下载
      个人资料
      • 访问:327289次
      • 积分:8806
      • 等级:
      • 排名:第2521名
      • 原创:574篇
      • 转载:13篇
      • 译文:0篇
      • 评论:36条
      我的链接
      最新评论