Python re(正则表达式)模块详解

一、Python中转义字符

  正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\ "表示正则表达式中的" \ ",因为正则表达式中如果要匹配" \ ",需要用\来转义,变成" \\ ",而Python语法中又需要对字符串中每一个\进行转义,所以就变成了" \\\\ "。
上面的写法是不是觉得很麻烦,为了使正则表达式具有更好的可读性,Python特别设计了原始字符串(raw string),需要提醒你的是,在写文件路径的时候就不要使用raw string了,这里存在陷阱。raw string就是用'r'作为字符串的前缀,如 r"\n":表示两个字符"\"和"n",而不是换行符了。Python中写正则表达式时推荐使用这种形式。

二、正则表达式元字符说明:

.    匹配除换行符以外的任意字符
^    匹配字符串的开始
$    匹配字符串的结束
[]   用来匹配一个指定的字符类别
?   对于前一个字符字符重复0次到1次
*    对于前一个字符重复0次到无穷次
{}   对于前一个字符重复m次
{m,n} 对前一个字符重复为m到n次
\d   匹配数字,相当于[0-9]
\D   匹配任何非数字字符,相当于[^0-9]
\s   匹配任意的空白符,相当于[ fv]
\S   匹配任何非空白字符,相当于[^ fv]
\w   匹配任何字母数字字符,相当于[a-zA-Z0-9_]
\W   匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
\b   匹配单词的开始或结束

三、导入正则表达式模块

3.1、导入正则表达式模块
>>> import  re
3.2、查看正则表达式模块方法

>>> dir(re)

['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_alphanum', '_cache', '_cache_repl', '_compile', '_compile_repl', '_expand', '_pattern_type', '_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 'finditer', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']

>>>

四、常用的正则表达式处理函数
4.1、re.search
     re.search 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
    提示:当我们不会用模块方法的时候用help
>>> help(re.search)
search(pattern, string, flags=0)

    第一个参数:规则
    第二个参数:表示要匹配的字符串
    第三个参数:标致位,用于控制正则表达式的匹配方式
    实例:下面的例子kuangl

>>> name="Hello,My name is kuangl,nice to meet you..."

>>> k=re.search(r'k(uan)gl',name)

>>> if k:

...     print k.group(0),k.group(1)

... else:

...     print "Sorry,not search!"

...

kuangl uan

4.2、re.match
    re.match 尝试从字符串的开始匹配一个模式,也等于说是匹配第一个单词
>>> help(re.match)
match(pattern, string, flags=0)
    第一个参数:规则
    第二个参数:表示要匹配的字符串
    第三个参数:标致位,用于控制正则表达式的匹配方式
    实例:下面的例子匹配Hello单词

>>> name="Hello,My name is kuangl,nice to meet you..."

>>> k=re.match(r"(\H....)",name)

>>> if k:

...      print k.group(0),'\n',k.group(1)

... else:

...     print "Sorry,not match!"

...

Hello

Hello

>>>

     re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字串,直到找到一个匹配。
4.3、re.findall
    re.findall 在目标字符串查找符合规则的字符串

>>> help(re.findall)

findall(pattern, string, flags=0)

   第一个参数:规则
   第二个参数:目标字符串
   但三个参数:后面还可以跟一个规则选择项
   返回的结果是一个列表,建中存放的是符合规则的字符串,如果没有符合规则的字符串呗找到,就会返回一个空值。
   实例:查找邮件账号

>>> mail='<user01@mail.com> <user02@mail.com> user04@mail.com' #第3个故意没有尖括号

>>> re.findall(r'(\w+@m....[a-z]{3})',mail)

['user01@mail.com', 'user02@mail.com', 'user04@mail.com']

4.4、re.sub
   re.sub 用于替换字符串的匹配项
>>> help(re.sub)
sub(pattern, repl, string, count=0)
   第一个参数:规则
   第二个参数:替换后的字符串
   第三个参数:字符串
   第四个参数:替换个数。默认为0,表示每个匹配项都替换
   实例:将空白处替换成-

>>> test="Hi, nice to meet you where are you from?"

>>> re.sub(r'\s','-',test)

'Hi,-nice-to-meet-you-where-are-you-from?'

>>> re.sub(r'\s','-',test,5)                      #替换至第5个

'Hi,-nice-to-meet-you-where are you from?'

>>>

4.5、re.split
   re.split 用于来分割字符串

>>> help(re.split)

split(pattern, string, maxsplit=0)

   第一个参数:规则
   第二个参数:字符串
   第三个参数:最大分割字符串,默认为0,表示每个匹配项都分割
   实例:分割所有的字符串

>>> test="Hi, nice to meet you where are you from?"

>>> re.split(r"\s+",test)

['Hi,', 'nice', 'to', 'meet', 'you', 'where', 'are', 'you', 'from?']

>>> re.split(r"\s+",test,3)                  #分割前三个

['Hi,', 'nice', 'to', 'meet you where are you from?']

>>>

4.6、re.compile
   re.compile 可以把正则表达式编译成一个正则对象
>>> help(re.compile)
compile(pattern, flags=0)
   第一个参数:规则
   第二个参数:标志位
   实例:

>>> test="Hi, nice to meet you where are you from?"

>>> k=re.compile(r'\w*o\w*') #匹配带o的字符串

>>> dir(k)

['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split', 'sub', 'subn']

>>> print k.findall(test)     #显示所有包涵o的字符串

['to', 'you', 'you', 'from']

>>> print k.sub(lambda m: '[' + m.group(0) + ']',test)  # 将字符串中含有o的单词用[]括起来

Hi, nice [to] meet [you] where are [you] [from]?

>>>
五、用urllib2、re、os 模块下载文件的脚本

#!/usr/bin/env python
import urllib2
import re
import os
URL='http://image.baidu.com/channel/wallpaper'
read=urllib2.urlopen(URL).read()
pat =  re.compile(r'src="http://.+?.js">')
urls=re.findall(pat,read)
for i in urls:
    url= i.replace('src="','').replace('">','')
try:
    iread=urllib2.urlopen(url).read()
    name=os.path.basename(url)
    with open(name,'wb') as jsname:
    jsname.write(iread)
except:

    print url,"url error"

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索正则表达式
, string
, 字符串
, 实例
, 参数
模块
python re模块详解、python正则表达式详解、python re正则表达式、python正则表达式模块、python re详解,以便于您获取更多的相关知识。

时间: 2024-09-21 19:41:49

Python re(正则表达式)模块详解的相关文章

python正则表达式re模块详解_python

快速入门 import re pattern = 'this' text = 'Does this text match the pattern?' match = re.search(pattern, text) s = match.start() e = match.end() print('Found "{0}"\nin "{1}"'.format(match.re.pattern, match.string)) print('from {0} to {1}

Python itertools模块详解

  篇文章主要介绍了Python itertools模块详解,本文基本是基于文档的翻译和补充,相当于翻译了,需要的朋友可以参考下 这货很强大, 必须掌握 文档 链接 http://docs.python.org/2/library/itertools.html pymotw 链接 http://pymotw.com/2/itertools/ 基本是基于文档的翻译和补充,相当于翻译了 itertools用于高效循环的迭代函数集合 组成 总体,整体了解 无限迭代器 代码如下: 迭代器 参数 结果 例

python自带的http模块详解_python

挺久没写博客了,因为博主开始了今年另一段美好的实习经历,学习加做项目,时间已排满:很感谢今年这两段经历,让我接触了golang和python,学习不同语言,可以跳出之前学习c/c++思维的限制,学习golang和python的优秀特性以及了解在不同的场景,适用不同的语言:而之前学习linux和c/c++,也使我很快就上手golang和python; 我学习的习惯,除了学习如何使用,还喜欢研究源码,学习运行机制,这样用起来才会得心应手或者说,使用这些语言或框架,就和平时吃饭睡觉一样,非常自然:因为

Python中操作mysql的pymysql模块详解_python

前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11.mysql版本:5.6.24 一.安装 pip3 install pymysql 二.使用操作 1.执行SQL #!/usr/bin/env pytho # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysql.connect(host=

发布你的Python模块详解_python

我们在学习Python的时候,除了用pip安装一些模块之外,有时候会从网站下载安装包下来安装,我也想要把我自己编写的模块做成这样的安装包,该怎么办,如何发布呢? 大概需要以下四个步骤: 1.首先为模块创建一个文件夹. 举个简单的栗子,你写了一个add.py模块文件,里面有个add方法实现加法.这第一步就需要你创建一个文件夹.并把add.py复制到这个文件夹里,为简单起见,我们把文件夹就命名为add add |__add.py 2.然后在新文件夹中创建一个名为"setup.py"的文件.

javascript中的正则表达式使用详解_javascript技巧

[1]定义:正则又叫规则或模式,是一个强大的字符串匹配工具,在javascript中是一个对象 [2]特性: [2.1]贪婪性,匹配最长的 [2.2]懒惰性,不设置/g,则只匹配第1个 [3]两种写法: [3.1]perl写法(使用字面量形式): var expression = /pattern/flags; e.g. var pattern = /a/i;//匹配字符串中所有'a'的实例 [3.1.1]三个标志flags [a]g:表示全局模式(global) [b]i:表示不区分大小写(i

python之import机制详解_python

本文详述了Python的import机制,对于理解Python的运行机制很有帮助! 1.标准import: Python中所有加载到内存的模块都放在 sys.modules .当 import 一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用 import 的模块的 Local 名字空间中.如果没有加载则从 sys.path 目录中按照模块名称查找模块文件,模块可以是py.pyc.pyd,找到后将模块载入内存,并加到 sys.modules 中,并

正则表达式使用详解(2)

在对正则表达式有了较为全面的了解之后,我们就来看一下如何在Perl,PHP,以及JavaScript中使用正则表达式. 通常,Perl中正则表达式的使用格式如下: operator / regular-expression / string-to-replace / modifiers 运算符一项可以是m或s,分别代表匹配运算和替换运算. 其中,正则表达式一项是将要进行匹配或替换操作的模式,可以由任意字符,元字符,或定位符等组成.替换字符串一项是使用s运算符时,对查找到的模式匹配对象进行替换的字

NodeJs中的VM模块详解

  这篇文章主要介绍了NodeJs中的VM模块详解,本文讲解了什么是VM?.VM模块的runInThisContext.runInThisContext方法等内容,需要的朋友可以参考下 什么是VM? VM模块是NodeJS里面的核心模块,支撑了require方法和NodeJS的运行机制,我们有些时候可能也要用到VM模板来做一些特殊的事情. 通过VM,JS可以被编译后立即执行或者编译保存下来稍后执行(JavaScript code can be compiled and run immediate