Python基础 :正则表达式

一、前言

1.1正则表达式简述

正则表达式是一种查找以及字符串替换操作。正则表达式在文本编辑器中广泛使用,比如正则表达式被用于:

  1.检查文本中是否含有指定的特征词

  2.找出文中匹配特征词的位置

  3.从文本中提取信息,比如:字符串的子串

  4.修改文本

与文本编辑器相似,几乎所有的高级编程语言都支持正则表达式。在这样的语境下,“文本”也就是一个字符串,可以执行的操作都是类似的。一些编程语言(比如Perl,JavaScript)会检查正则表达式的语法。

1.2 常用的正则匹配工具

在线匹配工具:

  1. http://www.regexpal.com/

2. http://rubular.com/

正则匹配软件:

McTracer

用过几个之后还是觉得这个是最好用的,支持将正则导成对应的语言如java C# js等还帮你转义了,Copy直接用就行了很方便,另外支持把正则表达式用法解释,如哪一段是捕获分组,哪段是贪婪匹配等等,总之用起来 So Happy .

1.3正则表达式语法

  \w匹配字母数字及下划线

  \W匹配非字母数字及下划线

  \s匹配任意空白字符,等价于 [\t\n\r\f].

  \S匹配任意非空字符

  \d匹配任意数字,等价于 [0-9]

  \D匹配任意非数字

  \A匹配字符串开始

  \Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串

  \z匹配字符串结束

  \G匹配最后匹配完成的位置

  \n匹配一个换行符

  \t匹配一个制表符

  ^匹配字符串的开头

  $匹配字符串的末尾。

  .匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。

  [...]用来表示一组字符,单独列出:[amk] 匹配 ‘a‘,‘m‘或‘k‘

  [^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。

  *匹配0个或多个的表达式。

  +匹配1个或多个的表达式。

  ?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式

  {n}精确匹配n个前面表达式。

  {n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式

  a|b匹配a或b

  ( )匹配括号内的表达式,也表示一个组

可能完了之后就有点晕晕的了把,不用担心,下面我们会详细讲解下一些常见的规则的用法。怎么用它来从网页中提取我们想要的信息。

1.4Python中使用

其实正则表达式不是Python独有的,它在其他编程语言中也可以使用,但是Python的re库提供了整个正则表达式的实现,利用re库我们就可以在Python中使用正则表达式来,在Python中写正则表达式几乎都是用的这个库。

下面我们就来了解下它的用法。

match()

在这里首先介绍第一个常用的匹配方法,match()方法,我们向这个方法传入要匹配的字符串以及正则表达式,就可以来检测这个正则表达式是否匹配字符串了。

match()方法会尝试从字符串的起始位置匹配正则表达式,如果匹配,就返回匹配成功的结果,如果不匹配,那就返回None。

我们用一个实例来感受一下:

import re

content =‘Hello 123 4567 World_This a Regex Demo‘
print (len(content))
result = re.match(‘^Hello\s\d\d\d\s\d{4}\s\w{10}‘,content)
print result
print result.group()
print result.span()

输出结果:

在这里我们首先声明了一个字符串,包含英文字母、空白字符、数字等等内容,接下来我们写了一个正则表达式^Hello\s\d\d\d\s\d{4}\s\w{10}来匹配这个长字符串。

开头的^是匹配字符串的开头,也就是以Hello开头,然后\s匹配空白字符,用来匹配目标字符串的空格,\d匹配数字,三个\d匹配123,然后再写一个\s匹配空格,后面还有4567,我们其实可以依然用四个\d来匹配,但是这么写起来比较繁琐,所以在后面可以跟{4}代表匹配前面的字符四次,也就是匹配四个数字,这样也可以完成匹配,然后后面再紧接一个空白字符,然后\w{10}匹配10个字母及下划线,正则表达式到此为止就结束了,我们注意到其实并没有把目标字符串匹配完,不过这样依然可以进行匹配,只不过匹配结果短一点而已。

我们调用match()方法,第一个参数传入了正则表达式,第二个参数传入了要匹配的字符串。

打印输出一下结果,可以看到结果是SRE_Match对象,证明成功匹配,它有两个方法,group()方法可以输出匹配到的内容,结果是Hello 123 4567 World_This,这恰好是我们正则表达式规则所匹配的内容,span()方法可以输出匹配的范围,结果是(0, 25),这个就是匹配到的结果字符串在原字符串中的位置范围。

通过上面的例子我们可以基本了解怎样在Python中怎样使用正则表达式来匹配一段文字。

二、正则表达式练习

初级练习

1、求非负整数 : ^\d+$

Tips:需要注意的是这个匹配模式为多行模式下进行的

2、匹配正整数: ^[1-9]*[1-9][0-9]*$ 在网上也有这种写法的 ^[0-9]*[1-9][0-9]*$

这里截图我也不贴了,前者指能匹配123012这种整数,而后者可以匹配001230。

取舍就看实际的需要了

3、非正整数:^(-\d+|(0+))$

4、负整数:^-[0-9]*[1-9][0-9]*$

5、整数 :^-?\d+$

6、非负浮点数 :^\d+(\.\d+)?$

7、正浮点数 :^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

8、非正浮点数 :^((-\d+(\.\d+)?)|(0+(\.0+)?))$

9、负浮点数:^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

10、浮点数:^(-?\d+)(\.\d+)?$

11、有数字、26个英文字母组成的字符串:^[A-Za-z0-9]+$

中级练习

1、长度为8-10的用户密码(以字母开头、数字、下划线)

^[a-zA-Z]\w{7,10}$

2、验证输入只能是汉字 : ^[\u4e00-\u9fa5]{0,}$

3、电子邮箱验证:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

4、URL地址验证:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

5、电话号码的验证:请参考:http://blog.csdn.net/kiritor/article/details/8733469

6、简单的身份证号验证:\d{15}|\d{18}$

..............................

高级练习

1、提取并捕获html标签内容:

<a(?: [^>]*)+href=([^ >]*)(?: [^>]*)*>

<OPTION\s.*?>

以上练习是参考网上的。写的不好之处,请大家多多指教。

时间: 2024-10-03 23:27:24

Python基础 :正则表达式的相关文章

Python基础----正则表达式和re模块

正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行. 字符匹配(普通字符,元字符): 1 普通字符(完全匹配):大多数字符和字母都会和自身匹配 1 >>> import re 2 >>> res='hello world good morning' 3 >>> re.findall(

python基础——正则表达式

1.c语言中的转义字符 转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将当前位置移到下一行开头 010 \r 回车(CR) ,将当前位置移到本行开头 013 \t 水平制表(HT) (跳到下一个TAB位置) 009 \v 垂直制表(VT) 011 \\ 代表一个反斜线字符''\' 092 \' 代表一个单引号(撇号)字符 039 \" 代表一个双

python 基础 正则表达式

对于许多需要处理文本来说的技术工程师,必须对Python正则表达式有一个全面深入的认识,不但要深入理解下什么是Python正则表达式,还要对Python正则表达式字符有所认识. 此外,还有少数字符比较特殊,它们和自身并不匹配,而是跟其字面值之外的一些特殊的东西匹配,这些东西可能是字符集.重复次数或者位置等.常用的元字符包括: . ^ $ * + ? { } [ ] \ | ( ) 对于这些特殊字符,本文会陆续加以介绍.不过我们这里先了解一下用来匹配字符的元字符.首先,句点“.”这个元字符通常用于

Python基础 - 正则表达式

正则表达式, 是用来描述, 匹配字符串规则的. 跟什么编程语言没啥关系, 这个太强大了. Python中, 内置 re 模块对正则有很强大的支持. 正则表达式基本语法 ". " 任意单字符,除了\n "* " 其前面子模式0或多次 '+ ' 其前面子模式的**1或多次 '- ' 在 [ ] 之间表示范围,如[0-9] | 前or后的字符串 ^ 后面的模式开头 '$ '后面的模式结尾 ? 前面0或1个字符, 也作为非贪婪限定词 ?转义 \num 子模式编号,名字 \f

Python基础----正则表达式爬虫应用,configparser模块和subprocess模块

正则表达式爬虫应用(校花网) 1 import requests 2 import re 3 import json 4 #定义函数返回网页的字符串信息 5 def getPage_str(url): 6 page_string=requests.get(url) 7 return page_string.text 8 9 hua_dic={} 10 def run_re(url): #爬取名字.学校和喜爱的人数 11 hua_str=getPage_str(url) 12 hua_list=r

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

Python基础之 正则表达式指南

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.<html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法

Python基础教程【读书笔记】 - 2016/7/31

希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第十波:第10章  充电时刻 Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装包括一组模块,称为标准库standard library.展示这些模块的工作方式,讨论如何分析它们,学习它们所提供的功能. [10.1] 模块 已经知道如何创建和执行自己的程序,也学会了怎么用import从外部模块获取函数并且为自己的程序使用.接下来看看怎么编写自己的模块. [10.1.1] 模块是程序

Python基础教程(第十章 自带电池)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5459376.html______ Created on Marlowes 现在已经介绍了Python语言的大部分基础知识.Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装中还包括一组模块,称为标准库(standard library).之前已经介绍了一些模块(例如math和cmath,其中包

Python基础篇(八)

key words:私有变量,类静态变量,生成器,导入Python模块,r查看模块可以使用的函数,查看帮助信息,启动外部程序,集合,堆,时间模块,random模块,shelve模块,文件读取等 >>> class Rectangle: ...     def __init__(self): ...         self.__width = 0 ...         self.__height = 0 ...     def setSize(self,width,height): .