python re正则表达式模块(Regular Expression)

 更新时间:2014年07月16日 09:42:59   投稿:hebedich   我要评论
Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具.

模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等

复习一下基本的正则表达式吧

 .:匹配除了换行符以为的任意单个字符

 *:匹配任意字符,一个,零个,多个都能匹配得到 俗称贪婪模式

+:匹配位于+之前的一个或者多个字符

 |:匹配位于|之前或者之后的字符

 ^:匹配行首

 $:匹配行尾

 ?:匹配位于?之前的零个或者一个字符,不匹配多个字符

 \:表示 \ 之后的为转义字符

 []:匹配[]之中的任意单个字符,[0-9]表示匹配0到9任意一个数字

 ():将位于()之内的的内容当作一个整体

 {}:按{}中的次数进行匹配,100[0-9]{3}表示在100之后任意匹配一个3位数(100-999)

python中以\开头的元字符:

特殊序列符号
意义
\A
只在字符串开始进行匹配
\Z
只在字符串结尾进行匹配
\b
匹配位于开始或结尾的空字符串
\B
匹配不位于开始或结尾的空字符串
\d
相当于[0-9]
\D
相当于[^0-9]
\s
匹配任意空白字符:[\t\n\r\r\v]
\S
匹配任意非空白字符:[^\t\n\r\r\v]
\w
匹配任意数字和字母:[a-zA-Z0-9]
\W
匹配任意非数字和字母:[^a-zA-Z0-9]

正则表达式语法表

语法 意义 说明
"." 任意字符
"^" 字符串开始 '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
"$" 字符串结尾 与上同理
"*" 
0 个或多个字符(贪婪匹配)
<*>匹配<title>chinaunix</title>
"+"
1 个或多个字符(贪婪匹配
与上同理
"?"
0 个或多个字符(贪婪匹配
与上同理
*?,+?,??
以上三个取第一个匹配结果(非贪婪匹配 <*>匹配<title>
{m,n}
对于前一个字符重复m到n次,{m}亦可
a{6}匹配6个a、a{2,4}匹配2到4个a
{m,n}?
对于前一个字符重复m到n次,并取尽可能少
‘aaaaaa'中a{2,4}只会匹配2个
"\\"
特殊字符转义或者特殊序列
[]
表示一个字符集 [0-9]、[a-z]、[A-Z]、[^0]
"|"
A|B,或运算
(...)
匹配括号中任意表达式
(?#...)
注释,可忽略
(?=...)
Matches if ... matches next, but doesn't consume the string.
'(?=test)'  在hellotest中匹配hello
(?!...)
Matches if ... doesn't match next.
'(?!=test)'  若hello后面不为test,匹配hello
(?<=...) 
Matches if preceded by ... (must be fixed length).
'(?<=hello)test'  在hellotest中匹配test
(?<!...)
Matches if not preceded by ... (must be fixed length).
'(?<!hello)test'  在hellotest中不匹配test

匹配的标志和含义

标志 含义
re.I 忽略大小写
re.L 根据本地设置而更改\w,\W,\b,\B,\s,\S的匹配内容
re.M 多行匹配模式
re.S 使“.”元字符匹配换行符
re.U 匹配Unicode字符
re.X 忽略需要匹配模式中的空格,并且可以使用"#"号注释


文本内容(提取Linux下的password文件)

man:x:6:12:man:/var/cache/man:/bin/nologin

re模块中有3个搜索函数,每个函数都接受3个参数(匹配模式,要匹配的字符串,进行匹配的标志),如果匹配到了就返回一个对象实例,么有就返会None.

findall():用于在字符串中查找符合正则表达式的字符串,并返回这些字符串的列表

search():搜索整个字符串,返回对象实例

match():只从第一个字符开始匹配,后面的不再匹配,返回对象实例

lovelinux@LoveLinux:~/py/boke$ cat text 
man:x:6:12:man:/var/cache/man:/bin/sh
lovelinux@LoveLinux:~/py/boke$ cat test.py
#/usr/bin/env python
#coding:utf-8
import re
with open('text','r') as txt:
 f = txt.read()
 print re.match('bin',f)
 print re.search('bin',f).end() 
lovelinux@LoveLinux:~/py/boke$ python test.py 
None
34
lovelinux@LoveLinux:~/py/boke$ vim test.py
lovelinux@LoveLinux:~/py/boke$ python test.py 
None
<_sre.SRE_Match object at 0x7f12fc9f9ed0>

返回是对象实例有2个方法,

start():返回记录匹配到字符的开始索引 

end():返回记录匹配到字符的结束索引

lovelinux@LoveLinux:~/py/boke$ python test.py 
None
31
34
lovelinux@LoveLinux:~/py/boke$ cat test.py 
#/usr/bin/env python
#coding:utf-8
import re
with open('text','r') as txt:
 f = txt.read()
 print re.match('bin',f)
 print re.search('bin',f).start()
 print re.search('bin',f).end()

相关文章

  • python基础教程之实现石头剪刀布游戏示例

    python基础教程之实现石头剪刀布游戏示例

    使用PYTHON设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",下面是实现方法,需要的朋友可以参考下
    2014-02-02
  • 详解python Todo清单实战

    详解python Todo清单实战

    这篇文章主要介绍了详解python Todo清单实战,需要实现的功能有添加任务、删除任务、编辑任务,操作要关联数据库,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】

    Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】

    这篇文章主要介绍了Python 网络编程之UDP发送接收数据功能,结合实例形式分析了Python使用socket套接字实现基于UDP协议的数据发送端与接收端相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • pandas创建新Dataframe并添加多行的实例

    pandas创建新Dataframe并添加多行的实例

    下面小编就为大家分享一篇pandas创建新Dataframe并添加多行的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python模块之subprocess模块级方法的使用

    python模块之subprocess模块级方法的使用

    这篇文章主要介绍了python模块之subprocess模块级方法的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 解决Pandas to_json()中文乱码,转化为json数组的问题

    解决Pandas to_json()中文乱码,转化为json数组的问题

    今天小编就为大家分享一篇解决Pandas to_json() 中文乱码,转化为json数组的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python 自定义装饰器实例详解

    python 自定义装饰器实例详解

    这篇文章主要介绍了python 自定义装饰器,结合实例形式分析了Python自定义装饰器的功能、原理、用法及相关操作注意事项,需要的朋友可以参考下
    2019-07-07
  • centos6.8安装python3.7无法import _ssl的解决方法

    centos6.8安装python3.7无法import _ssl的解决方法

    这篇文章主要介绍了centos6.8安装python3.7无法import _ssl的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • 利用Python开发微信支付的注意事项

    利用Python开发微信支付的注意事项

    如今支付的引入是很多互联网产品都需要的。为了让用户用着更方便快捷,集成像支付宝、微信支付这样的第三方支付也就成了常有的事。今天跟着小编就来看看微信支付开发中几个值得注意的地方,涉及代码之处均用 Python 编写。
    2016-08-08
  • Python中使用MELIAE分析程序内存占用实例

    Python中使用MELIAE分析程序内存占用实例

    这篇文章主要介绍了Python中使用MELIAE分析程序内存占用实例,本文直接给出使用代码示例,需要的朋友可以参考下
    2015-02-02

最新评论