学会Python正则表达式,就看这20个例子(脚本之家修正版)

正则表达式是处理字符串的强大工具。作为一个概念而言,正则表达式对于Python来说并不是独有的。但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别。

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。

re 模块使 Python 语言拥有全部的正则表达式功能。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

1、查找第一个匹配串

import re
s='i love python very much'
pat='python'
r=re.search(pat,s)
print(r.span())#(7,13)

2、查找所有1

import re
s='山东省潍坊市青州第1中学高三1班'
pat='1'
r=re.finditer(pat,s)
for i in r:
 print(i)

# <re.Match object; span=(9, 10), match='1'>
# <re.Match object; span=(14, 15), match='1'>

3、\d匹配数字[0-9]

import re
s='一共20行代码运行时间13.59s'
pat=r'\d+'#+表示匹配数字(\d表示数字的通用字符)1次或多次
r=re.findall(pat,s)
print(r)
#['20','13','59']

我们想保留13.59而不是分开,请看4

4、?表示前一个字符匹配0或1次

import re

s='一共20行代码运行时间13.59s'
pat=r'\d+\.?\d+'#?表示匹配小数点(\.)0次或1次
r=re.findall(pat,s)
print(r)
#['20','13.59']

5、^匹配字符串的开头

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'^[emrt]' #查找以
r=re.findall(pat,s)
print(r)
# [],因为字符串的开头是字符`T`,不在emrt匹配范围内,所以返回为空

6、re.I 忽略大小写

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'^[emrt]' #查找以
r=re.compile(pat,re.I).search(s)
print(r)
# <re.Match object; span=(0, 1), match='T'> 表明字符串的开头在匹配列表中

7、使用正则提取单词

这是不准确版本,请参看第9个

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s[a-zA-Z]+'
r=re.findall(pat,s)
print(r) #[' module', ' provides', ' regular', ' expression', ' matching', ' operations', ' similar', ' to', ' those', ' found', ' in', ' Perl']

8、只捕获单词,去掉空格

使用()捕获,这是不准确版本,请参看第9个

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s([a-zA-Z]+)'
r=re.findall(pat,s)
print(r)
#['module', 'provides', 'regular', 'expression', 'matching', 'operations', 'similar', 'to', 'those', 'found', 'in', 'Perl']

9、补充上第一个单词

上面第8,看到提取单词中未包括第一个单词,使用?表示前面字符出现0次或1次,但是此字符还有表示贪心或非贪心匹配含义,使用时要谨慎。

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s?([a-zA-Z]+)'
r=re.findall(pat,s)
print(r)
#['This', 'module', 'provides', 'regular', 'expression', 'matching', 'operations', 'similar', 'to', 'those', 'found', 'in', 'Perl']

10、使用split函数直接分割单词

使用以上方法分割单词,不是简洁的,仅仅为了演示。分割单词最简单还是使用split函数。

import re

s = 'This module provides regular expression matching operations similar to those found in Perl'
pat = r'\s+'
r = re.split(pat,s)
print(r)
#['This', 'module', 'provides', 'regular', 'expression', 'matching', 'operations', 'similar', 'to', 'those', 'found', 'in', 'Perl']

11、提取以m或t开头的单词,忽略大小写

下面出现的结果不是我们想要的,原因出在 ?上!

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s?([mt][a-zA-Z]*)' # 查找以
r=re.findall(pat,s)
print(r)
#['module', 'matching', 'tions', 'milar', 'to', 'those']

12、使用^查找字符串开头的单词

综合11和12得到所有以m或t开头的单词

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'^([mt][a-zA-Z]*)\s' # 查找以
r=re.compile(pat,re.I).findall(s)
print(r)
#['This']

13、先分割,再查找满足要求的单词

使用match表示是否匹配

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s+'
r=re.split(pat,s)
res=[i for i in r if re.match(r'[mMtT]',i)]
print(res)
#['This', 'module', 'matching', 'to', 'those']

14、贪心匹配

尽可能多的匹配字符

import re

content='<h>ddedadsad</h><div>graph</div>bb<div>math</div>cc'
pat=re.compile(r"<div>(.*)</div>") #贪婪模式
m=pat.findall(content)
print(m)
#['graph</div>bb<div>math']

15、非贪心匹配

与14相比,仅仅多了一个问号(?),得到结果完全不同。

import re

content='<h>ddedadsad</h><div>graph</div>bb<div>math</div>cc'
pat=re.compile(r"<div>(.*?)</div>") #贪婪模式
m=pat.findall(content)
print(m)
#['graph', 'math']

与14比较可知,贪心匹配和非贪心匹配的区别,后者是字符串匹配后立即返回,见好就收。

16、含有多种分割符

使用split函数

import re

content = 'graph math,,english;chemistry' #这种
pat=re.compile(r"[\s\,\;]+") #贪婪模式
m=pat.split(content)
print(m)
#['graph', 'math', 'english', 'chemistry']

17、替换匹配的子串

sub函数实现对匹配子串的替换

import re

content="hello 12345, hello 456321"
pat=re.compile(r'\d+') #要替换的部分
m=pat.sub("666",content)
print(m)
#hello 666, hello 666

18、爬取百度首页标题

import re
from urllib import request

#爬虫爬取百度首页内容
data=request.urlopen("http://www.baidu.com/").read().decode()

#分析网页,确定正则表达式
pat=r'<title>(.*?)</title>'
result=re.search(pat,data)
print(result)
#<re.Match object; span=(1389, 1413), match='<title>百度一下,你就知道</title>'>

下面是知识点分享

19、常用元字符总结

. 匹配任意字符  
^ 匹配字符串始位置 
$ 匹配字符串中结束的位置 
* 前面的原子重复0次1次多次 
? 前面的原子重复一次或者0次 
+ 前面的原子重复一次或多次
{n} 前面的原子出现了 n 次
{n,} 前面的原子至少出现 n 次
{n,m} 前面的原子出现次数介于 n-m 之间
( ) 分组,需要输出的部分

20、常用通用字符总结

\s 匹配空白字符
\w 匹配任意字母/数字/下划线
\W 和小写 w 相反,匹配任意字母/数字/下划线以外的字符
\d 匹配十进制数字
\D 匹配除了十进制数以外的值
[0-9] 匹配一个0-9之间的数字
[a-z] 匹配小写英文字母
[A-Z] 匹配大写英文字母

以上就是Python中正则模块的基本使用总结,里面有循序渐进的优化分析过程,这些虽然是中间过程,但是对于正则小白而言,了解这些很有必要。笔者对于正则的理解也比较肤浅,如有总结不到位之处,恳请指正。

(0)

相关推荐

  • python 使用正则表达式按照多个空格分割字符的实例

    程序代码如下 import os import re os.system("nmap -sP 192.168.3.0/24") //扫描IP mac = os.popen("cat /proc/net/arp ").readlines() //按行读取 length = len(mac) for i in range(1,length): b= re.split(r" +",mac[i]) //按照多个空格分割 if(b[2]=='0x2'):

  • python正则表达式匹配IP代码实例

    这篇文章主要介绍了python正则表达式匹配IP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import re re.search(r'([1]\d\d|2[0-4]\d|25[0-5])','192') #re.search(r'([01]\d\d)','1XX') #[01] \d \d # 1 0-9 0-9 #re.search(r'(2[0-4]\d)','2XX') #2 [0-4] \d #2 0-4 0-9 #re.

  • python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析

    本文实例讲述了python 正则表达式贪婪模式与非贪婪模式原理.用法.分享给大家供大家参考,具体如下: 之前未接触过正则表达式,今日看python网络爬虫的源码,里面一行正则表达式匹配的代码初看之下,不是很理解,代码如下: myItems = re.findall('<div.*?class="content".*?title="(.*?)">(.*?)</div>',unicodePage,re.S) ".*?"这种匹配

  • python 用正则表达式筛选文本信息的实例

    本文主要介绍如何对多个文本进行读取,并采用正则表达式对其中的信息进行筛选,将筛选出来的信息存写到一个新文本. 文本基础操作 打开文件:open('文件名','打开方式')>>>file=open(r'C:\Users\yuanlei\Desktop\mytxt.txt','w+').为避免报错,在文件名的引号前加个r. 文件打开方式:只读--r或rt,rb为二进制文件:打开文件前清空文件内容--w或wt:在文末写入--a+: 清空内容然后在文末写入--w+:写到文件任意位置--r+; 关

  • Python3使用正则表达式爬取内涵段子示例

    本文实例讲述了Python3使用正则表达式爬取内涵段子的方法.分享给大家供大家参考,具体如下: 似乎正则在爬虫中用的不是很广泛,但是也是基本功需要我们去掌握. 先将内涵段子网页爬取下来,之后利用正则进行匹配,匹配完成后将匹配的段子写入文本文档内.代码如下: # -*- coding:utf-8 -*- from urllib import request as urllib2 import re # 利用正则表达式爬取内涵段子 url = r'http://www.neihanpa.com/ar

  • Python 正则表达式爬虫使用案例解析

    现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/article/list_5_1.html 打开之后,不难看出里面一个一个非常有内涵的段子,当你进行翻页的时候,注意url地址的变化: 第一页url: http: //www.neihan8.com/article/list_5_1 .html 第二页url: http: //www.neihan8.com/article/l

  • Python正则表达式实现简易计算器功能示例

    本文实例讲述了Python正则表达式实现简易计算器功能.分享给大家供大家参考,具体如下: 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:1*2*((1+2)/(2+3)+1)*5.1-3+2**2 import re class SimpleCalc(object): # 表达式检测 def check(self,exp): # 合法字符检测 res = re.findall(r"[^\d\+\-\*/\(\)\.]", exp) print(res) i

  • python里使用正则表达式的组嵌套实例详解

    python里使用正则表达式的组嵌套实例详解 由于组本身是一个完整的正则表达式,所以可以将组嵌套在其他组中,以构建更复杂的表达式.下面的例子,就是进行组嵌套的例子: #python 3.6 #蔡军生 #http://blog.csdn.net/caimouse/article/details/51749579 # import re def test_patterns(text, patterns): """Given source text and a list of pa

  • Python爬虫之正则表达式基本用法实例分析

    本文实例讲述了Python爬虫之正则表达式基本用法.分享给大家供大家参考,具体如下: 一.简介 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列匹配某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些匹配某个模式的文本. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表

  • python正则表达式及使用正则表达式的例子

    正则表达式 正则表达用来匹配字符串 正则表达式匹配过程 依次拿出表达式和文本中的字符串进行比价 如果每个字符都能匹配,则匹配成功:一旦有匹配不成功的字符,则匹配失败 如果有量词和边界,则匹配过程稍微有些不同 正则表达式语法规则 语法 说明 表达式实例 匹配字符串 字符 . 匹配除换行"\n"外的任意字符串 abc abc \ 转义字符,使后一个字符改变原来的意思 a\\c a\c [...] 字符集,对应的位置可以是字符集中任意字符,字符集中的字符可以逐个列出,也可以给出范围,如[ab

  • python的re正则表达式实例代码

    本文研究的主要是python的re正则表达式的相关内容,具体如下. 概念:正则表达式(通项公式)是用来简洁表达一组字符串的表达式.优势是简洁,一行胜千言. 应用:字符串匹配. 实例代码: CODEC = 'UTF-8' #encoding:utf-8 import re p=re.compile("ab") str = "abfffa" #match必须匹配首字母 if p.match(str): print p.match(str).group() #match必

  • python 正则表达式参数替换实例详解

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. 本章节主要介绍python 正则表达式参数替

  • python正则表达式匹配[]中间为任意字符的实例

    如下所示: result = re.search('^\[[\S\s]*\]$',str) print(result) print(result.group()) <_sre.SRE_Match object; span=(0, 35), match="['rtb-c09v2lff02' 'rtb-7g1yn4rvmx']"> ['rtb-c09v2lff02' 'rtb-7g1yn4rvmx'] 以上这篇python正则表达式匹配[]中间为任意字符的实例就是小编分享给大家

  • python正则表达式实例代码

    re 模块使 Python 语言拥有全部的正则表达式功能. 会用到的语法 正则字符 释义 举例 + 前面元素至少出现一次 ab+:ab.abbbb 等 * 前面元素出现0次或多次 ab*:a.ab.abb 等 ? 匹配前面的一次或0次 Ab?: A.Ab 等 ^ 作为开始标记 ^a:abc.aaaaaa等 $ 作为结束标记 c$:abc.cccc 等 \d 数字 3.4.9 等 正则字符 释义 举例 + 前面元素至少出现一次 ab+:ab.abbbb 等 * 前面元素出现0次或多次 ab*:a.

  • Python正则表达式学习小例子

    正则表达式是处理字符串的强大工具.作为一个概念而言,正则表达式对于Python来说并不是独有的.但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别. (1)匹配1-100之间的数 import re s = '100' # 1-100内的任意数字 ret = re.match(r'(100|[1-9]\d{0,1})$',s) print(ret.group()) (100|[1-9]\d{0,1})$ 100可以匹配100 | 或者匹配[1-9]中的一个数,然后后面\d是数字

  • Python编程快速上手——正则表达式查找功能案例分析

    本文实例讲述了Python正则表达式查找功能.分享给大家供大家参考,具体如下: 题目如下: 编写一个程序,打开文件夹中所有的.txt文件,查找匹配用户提供的正则表达式的所有行.结果应该打印到屏幕上. 思路如下: 程序需要做的事情如下: 遍历文件夹得到所有.txt文件名 打开所有.txt文件,正则表达式进行模式匹配 查找结果显示到屏幕 代码需要做的事情如下: 导入re,os模块 定义正则表达式函数 函数内进行正则表达式匹配,并返回匹配所在行列表 for调用os.listdir(path),生成.t

随机推荐