1、正则表达式的语法

  • . 代表别的单个字符
  • [] 字符集,对单个字符给出取值范围
  • [^] 非字符集,对单个字符给出排除范围
  • *前三个字符0次依然最佳次扩充
  • +前3个字符3回或极端次扩充
  • ?前2个字符0次或二次扩展
  • |左右表明式任意二个
  • {m}扩张前一个字符m次
  • {m,n}扩充前三个字符m至n次
  • ^相配字符串早先
  • $相配字符串结尾
  • ()分组标识,内部只好采取|操作符
  • \d数字,等价于[0-9]
  • \w单词字符,等价于[A-Z,a-z,0-9]

    二、python中re库的运用

    Re库是python的标准库,主要用来字符串相配,调用方法:import re

    ### 二.一、正则表明式字符串的档次

    re库接纳raw string类型来代表正则表明式,表示为
    r’text’
    raw
    string是不包罗对转义符的重复员和转业义的字符串,总来说就是string会对字符转义,而raw
    string不会,因为在正则表明中会出现转义符号,所以免止麻烦我们利用raw
    string

    ### 二.2、Re库重要功用函数

  • re.search()在一个字符串中搜索正则表达式的首先个职责,重回match对象

  • re.match()从2个字符串的启幕地方起相配正则表明式,重回match对象
  • re.findall()寻找字符串,以列表类型再次来到全体能相称的子串
  • 金沙注册送58,re.split()将一个字符串遵照正则表达式相称结果开展剪切,重返列表类型
  • re.finditer()检索字符串,再次回到2个金童玉女结果的迭代类型,每一个迭代成分是match对象
  • re.sub()在二个字符串中替换全部相称正则表明式的子串,再次回到替换后的字符串

    #### 2.2.1、re.search(pattern, string, flags=0)

    在二个字符串中找找正则表明式的第叁个地方,重回match对象

  • pattern : 正则表明式的字符串或原生字符串表示

  • string : 待相称字符串
  • flags : 正则表明式使用时的主宰标识
    • re.I re.IGNORECASE
      忽略正则表明式的分寸写,[A‐Z]能够合营小写字符
    • re.M re.MULTILINE
      正则表明式中的^操作符能够将给定字符串的每行业作相配起来
    • re.S re.远古古迹守卫LL
      正则表达式中的.操作符能够合作全部字符,暗许匹配除换行外的保有字符

举例表明:

import re
match = re.search(r'[1-9]\d{5}', 'BIT 100081')
if match:
    print(match.group(0))

结果为100081

正则表明式 (regular expression,regex,RE)

regular expression / regex / RE

正则表达式是1个诡异的字符类别,它能协理您方便的检查2个字符串是不是与某种情势相称。Python
自一.伍版本起增添了re 模块,它提供 Perl 风格的正则表明式情势。re 模块使
Python 语言具备壹切的正则表明式功效。compile
函数依照四个方式字符串和可选的表明参数生成二个正则表明式对象。该对象具有一层层措施用李欣蔓则表达式相称和替换。re
模块也提供了与那几个办法效果完全1致的函数,这个函数使用一个方式字符串做为它们的率先个参数。

正则表明式在文本处理中异平常用

· 表达文本类型的风味(病毒、入侵等)

正则表明式的应用

· 编写翻译:将适合正则表明式语法的字符串调换来正则表明式特征。

regular expression / regex / RE

正则表明式是二个非常的字符体系,它能补助您方便的自笔者批评多少个字符串是不是与某种方式相称。Python
自一.5版本起扩大了re 模块,它提供 Perl 风格的正则表达式格局。re 模块使
Python 语言具备一切的正则表明式作用。compile
函数根据三个形式字符串和可选的标识参数生成二个正则表达式对象。该目的具备一层层措施用于正则表明式相配和替换。re
模块也提供了与那几个措施效果完全壹致的函数,那些函数使用1个情势字符串做为它们的第3个参数。

正则表明式在文本处理中丰硕常用

· 表明文本类型的特点(病毒、凌犯等)

正则表达式的应用

· 编写翻译:将适合正则表明式语法的字符串调换来正则表明式特征。

【金沙注册送58】正则表明式,Python互联网爬虫与消息提取。2.2.2、re.match(pattern, string, flags=0)

从二个字符串的始发地点起相配正则表达式,再次来到match对象
参数同search函数
举例表明:

import re
match = re.match(r'[1-9]\d{5}', 'BIT 100081')
print(match.group(0))

结果会报错,match为空,因为match函数是
从字符串开始位置开始匹配,因为从开始位置没有匹配到,所以为空

正则表明式是用来轻松表达一组字符串的表明式
正则表达式是1种通用的字符串说明框架
正则表达式是一种针对字符串表明”简洁”和”特征”思想的工具
正则表明式能够用来推断某字符串的风味归属

正则表明式的语法

正则表明式的语法

2.2.3、re.findall(pattern, string, flags=0)

检索字符串,以列表类型重回全部能合营的子串
参数同search
举例表达:

import re
ls=re.findall(r'[1-9]\d{5}', 'BIT100081 TSU100084')
print(ls)

结果为['100081', '100084']

正则表明式在文本处理中异日常用:
发挥文本类型的风味(病毒、侵犯等)
再者索求或调换一组字符串
相配字符串的万事或部分 最要害行使在字符串相配中

正则表明式的常用操作符

操作符 说明 实例
. 表示任何单个字符  
[] 字符集,对单个字符给出取值范围 [abc]表示a、b、c,[a-z]表示a到z单个字符
[^] 非字符集,对单个字符给出排除范围 [^abc]表示非a或b或c的单个字符
* 前一个字符0次或无限次扩展 abc*表示ab、abc、abcc、abccc等
+ 前一个字符1次或无限次扩展 abc+表示abc、abcc、abccc等
? 前一个字符0次或1次扩展 abc?表示ab、abc
| 左右表达式任意一个 abc|def表示abc、def
{m} 扩展前一个字符m次 ab{2}c表示abbc
{m,n} 扩展前一个字符m至n次(含n) ab{1,2}c表示abc、abbc
^ 匹配字符串开头 ^abc表示abc且在一个字符串的开头
$ 匹配字符串结尾 abc$表示abc且在一个字符串的结尾
() 分组标记,内部只能使用|操作符 (abc)表示abc,(abc|def)表示abc、def
\d 数字,等价于[0-9]  
\w 单词字符,等价于[A-Za-z0-9_]  

正则表明式的常用操作符

操作符 说明 实例
. 表示任何单个字符  
[] 字符集,对单个字符给出取值范围 [abc]表示a、b、c,[a-z]表示a到z单个字符
[^] 非字符集,对单个字符给出排除范围 [^abc]表示非a或b或c的单个字符
* 前一个字符0次或无限次扩展 abc*表示ab、abc、abcc、abccc等
+ 前一个字符1次或无限次扩展 abc+表示abc、abcc、abccc等
? 前一个字符0次或1次扩展 abc?表示ab、abc
| 左右表达式任意一个 abc|def表示abc、def
{m} 扩展前一个字符m次 ab{2}c表示abbc
{m,n} 扩展前一个字符m至n次(含n) ab{1,2}c表示abc、abbc
^ 匹配字符串开头 ^abc表示abc且在一个字符串的开头
$ 匹配字符串结尾 abc$表示abc且在一个字符串的结尾
() 分组标记,内部只能使用|操作符 (abc)表示abc,(abc|def)表示abc、def
\d 数字,等价于[0-9]  
\w 单词字符,等价于[A-Za-z0-9_]  

2.2.4、re.split(pattern, string, maxsplit=0, flags=0)

将叁个字符串依据正则表明式相称结果开始展览分割重回列表类型

  • maxsplit : 最大分割数,剩余部分作为最终2个要素输出
    举例表达 :

import re
re.split(r'[1-9]\d{5}', 'BIT100081 TSU100084')
结果['BIT', ' TSU', ' ']
re.split(r'[1-9]\d{5}', 'BIT100081 TSU100084', maxsplit=1)
结果['BIT', ' TSU100081']

编写翻译:将符合正则表明式语法的字符串调换到正则表明式特征
例如:regex=’P(Y|YT|YTH|YTHO)?N’ p=re.compile(regex) 特征(p)

杰出正则表达式实例

^[A-Za-z]+$ 由26个字母组成的字符串
^[A-Za-z0-9]+$ 由26个字母和数字组成的字符串
^-?\d+$ 整数形式的字符串
^[0-9]*[1-9][0-9]*$ 正整数形式的字符串
[1-9]\d{5} 中国境内邮政编码,6位
[\u4e00-\u9fa5] 匹配中文字符
\d{3}-\d{8}|\d{4}-\d{7} 国内电话号码,010-68913536

杰出正则表明式实例

^[A-Za-z]+$ 由26个字母组成的字符串
^[A-Za-z0-9]+$ 由26个字母和数字组成的字符串
^-?\d+$ 整数形式的字符串
^[0-9]*[1-9][0-9]*$ 正整数形式的字符串
[1-9]\d{5} 中国境内邮政编码,6位
[\u4e00-\u9fa5] 匹配中文字符
\d{3}-\d{8}|\d{4}-\d{7} 国内电话号码,010-68913536

2.2.5、re.finditer(pattern, string, maxsplit=0, flags=0)

检索字符串,再次来到多少个非凡结果的迭代类型,每个迭代成分是match对象
参数同search
举例表达 :

import re
for m in re.finditer(r'[1-9]\d{5}', 'BIT100081 TSU100084'):
    if m:
        print(m.group(0))
结果为
100081
100084

正则表明式语法由字符和操作符构成

Re库介绍

Re库是Python的标准库,首要用以字符串匹配。

Re库介绍

Re库是Python的标准库,首要用以字符串相配。

2.2.6、re.sub(pattern, repl, string, count=0, flags=0)

在三个字符串中替换全体相称正则表明式的子串重返替换后的字符串

  • repl : 替换相配字符串的字符串
  • count : 相配的最大替换次数
    举例表达:

import re
re.sub(r'[1-9]\d{5}', ':zipcode', 'BIT100081 TSU100084')
结果为
'BIT:zipcode TSU:zipcode'

操作符 说明 实例
. 代表其他单个字符
[] 字符集,对单个字符给出取值范围
[^ ] 非字符串,对单个字符给出排除范围

正则表明式的表示项目

  • raw string 类型(原生字符串类型)

re库选拔raw string类型表示正则表明式,表示为:r’text’

例如:

        r'[1-9]\d{5}'
        r'\d{3}-\d{8}|\d{4}-\d{7}'

raw string是不包涵转义符的字符串

  • string类型,更繁琐。

例如:

        '[1-9]\\d{5}'
         '\\d{3}-\\d{8}|\\d{4}-\\d{7}'

当[正则表明式]包含[转义符]时使用[raw string]

正则表明式的代表项目

  • raw string 类型(原生字符串类型)

re库选择raw string类型表示正则表明式,表示为:r’text’

例如:

        r'[1-9]\d{5}'
        r'\d{3}-\d{8}|\d{4}-\d{7}'

raw string是不带有转义符的字符串

  • string类型,更繁琐。

例如:

        '[1-9]\\d{5}'
         '\\d{3}-\\d{8}|\\d{4}-\\d{7}'

当[正则表明式]包含[转义符]时使用[raw string]

二.3Re库的另1种等价用法(面向对象)

rst=re.search(r'[1-9]\d{5}', 'BIT 100081')
函数式的调用,一次性操作

pat=re.compile(r'[1-9]\d{5}')
rst=pat.search('BIT 100081')
编译后多次操作

regex=re.complie(pattern,flags=0)
regex也有上述多种用法

  • 前二个字符0次或极端次增加

Re库主要功用函数

函数 说明
re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每一个迭代类型是match对象
re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

Re库首要意义函数

函数 说明
re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每一个迭代类型是match对象
re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

2.4Re库的Match对象

Match对象是是2次相配的结果,包涵相称的重重新闻

以下是Match对象的习性

  • .string 待相称的文书
  • .re 相称时使用的patter对象(正则表明式)
  • .pos 正则表达式找寻文本的启幕地点
  • .endpos 正则表达式搜索文本的甘休地点

以下是Match对象的格局

  • .group(0) 得到非凡后的字符串
  • .start() 相称字符串在原始字符串的启幕地点
  • .end() 匹配字符串在原始字符串的了断地点
  • .span() 返回(.start(), .end())

    二.五Re库的贪婪相称和纤维相配

    当正则表明式能够合作参差不齐的多项时,重回哪三个啊?Re库默许使用贪婪匹配,即重返相配最长的子串

小小相配

  • *? 前一个字符0次或极端次扩充,最小相称
  • +? 前多少个字符2遍或极端次扩充,最小相配
  • ?? 前一个字符0次或二回扩大,最小相称
  • {m,n}? 扩充前二个字符m至n次(含n),最小相称

一经长度输出大概两样的,都能够透过在操作符后追加?形成最小匹配

re.search(pattern,string,flags=0)

· 在一个字符串中找找相称正则表明式的率先个岗位,再次回到match对象。

  • pattern:正则表明式的字符串或原生字符串表示
  • string:待相配字符串
  • flags:正则表明式使用时的支配标识
常用标记 说明
re.I re.IGNORECASE 忽略正则表达式的大小写,[A-Z]能够匹配小写字符
re.M re.MULTILINE 正则表达式中的^操作符能够将给定的字符串的每行当作匹配开始
re.S re.DOTALL 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

re.search(pattern,string,flags=0)

· 在二个字符串中找找相配正则表明式的第多少个职位,再次回到match对象。

  • pattern:正则表明式的字符串或原生字符串表示
  • string:待相称字符串
  • flags:正则表明式使用时的支配标识
常用标记 说明
re.I re.IGNORECASE 忽略正则表达式的大小写,[A-Z]能够匹配小写字符
re.M re.MULTILINE 正则表达式中的^操作符能够将给定的字符串的每行当作匹配开始
re.S re.DOTALL 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符
  • 前三个字符三次或极端次扩展

re.match()

re.match()

? 前三个字符0次或3遍扩展
| 左右表明式任意1个
{m} 增添前三个字符m次
{m,n} 扩充前贰个字符m次至n次(含n)
^ match字符串开首
$ match字符串结尾
( ) 分组标识,内部只好选择|操作符
\d 数字也就是于[0-9]
\w 单词字符,等价于[A-Za-z0-9_]
举例:P(Y|YT|YTH)?N PYTHON* PYTHON+ PY[TH]ON PY[^TH]?ON OY{:3}N
^ABC ABC$

re.findall(pattern,string,flags=0)

· 寻觅字符串,以列表类型重回全体能合营的子串。

re.findall(pattern,string,flags=0)

· 寻觅字符串,以列表类型重返全体能相配的子串。

经文正则表达式实例
^[A‐Za‐z]+$ 由二两个字母组成的字符串
^[A‐Za‐z0‐9]+$ 由二四个假名和数字构成的字符串
^‐?\d+$ 整数情势的字符串
^[0‐9][1‐9][0‐9]$ 正整数格局的字符串
[1‐9]\d{伍} 中国国内邮编7人
[\u4e00‐\u9fa5] 相配中文字符
\d{3}‐\d{8}|\d{4}‐\d{七} 国内电话号码

re.split(pattern,string,maxsplit=0,flags=0)

· 将3个字符串依据正则表明式相称结果开始展览剪切,重临列表类型。

  • maxsplit:最大分隔数,剩余部分作为最后三个要素输出

re.split(pattern,string,maxsplit=0,flags=0)

· 将叁个字符串依据正则表明式相称结果开始展览划分,重回列表类型。

  • maxsplit:最大分隔数,剩余部分作为最后三个因素输出

matchip地址的正则表明式
(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([0-9]?\d|1\d{2}|2[0-4]\d|25[0-5])

re.finditer(pattern,string,flags=0)

· 搜索字符串,重返3个相称结果的迭代类型,每一个迭代成分是match对象。

re.finditer(pattern,string,flags=0)

· 搜索字符串,重回二个相配结果的迭代类型,每一种迭代成分是match对象。

import re
re库采取raw string类型表示正则表明式,表示为: r’text’
例如: r'[1-9]\d{5}’
raw string是不含有对转义符再一次转义的字符串
re库也得以利用string类型表示正则表明式,但更麻烦 例如: ‘[1-9]\d{5}’
当正则表明式包蕴转义符时,使用raw string

re.sub(pattern,repl,string,count=0,flags=0)

· 在2个字符串中替换全数匹配正则表达式的子串,重回替换后的字符串。

  • repl:替换相称字符串的字符串
  • count:匹配的最大替换次数

re.sub(pattern,repl,string,count=0,flags=0)

· 在1个字符串中替换全数相称正则表明式的子串,再次来到替换后的字符串。

  • repl:替换相称字符串的字符串
  • count:相称的最大替换次数

Re库首要成效函数
re.search():在一个字符串中寻找match正则表达式的率先个职位,重返match对象
re.match():从一个字符串的发轫地方起match正则表达式,重临match对象
re.findall():寻找字符串,以列表类型重返全体能match的子串
re.split():将三个字符串依照正则说明式match结果举办划分,重回列表类型
re.finditer():找寻字符串,重回1个match结果的迭代类型,每种迭代元素是match对象
re.sub():在三个字符串中替换全体match正则表明式的子串,重返替换后的字符串

regex = re.compile(pattern,flags=0)

· 将正则表明式的字符串格局编写翻译成正则表明式对象

regex = re.compile(pattern,flags=0)

· 将正则表明式的字符串方式编译成正则表达式对象

re.search(pattern,string,flags=0) #match=re.search(r'[1-9]\d{5},’BIT
100081′)
pattern:正则表明式的字符串或原生字符串表示
string:待match字符串
flags:正则说明式使用时的主宰标识

Re库的另1种等价用法

函数 说明
regex.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
regex.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
regex.findall() 搜索字符串,以列表类型返回全部能匹配的子串
regex.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
regex.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每一个迭代类型是match对象
regex.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

Re库的另一种等价用法

函数 说明
regex.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
regex.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象
regex.findall() 搜索字符串,以列表类型返回全部能匹配的子串
regex.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
regex.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每一个迭代类型是match对象
regex.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

常用标志以及说明
re.I re.IGNORECASE:忽略正则表明式的高低写
re.M
re.MULTILINE:正则表明式中的^操作符能够将给定字符串的每行业做match初步
re.S
re.古迹守卫LL:正则表达式中的.操作符能够match全部字符,私下认可match除换行外的享有字符

Re库的match对象

Re库的match对象

re.match(pattern, string, flags=0)

MAtch对象的习性

属性 说明
.string 待匹配的文本
.re 匹配时使用的patrern对象(正则表达式)
.pos 正则表达式搜索文本的开始位置
.endpos 正则表达式搜索文本的结束位置

MAtch对象的属性

属性 说明
.string 待匹配的文本
.re 匹配时使用的patrern对象(正则表达式)
.pos 正则表达式搜索文本的开始位置
.endpos 正则表达式搜索文本的结束位置

re.findall(pattern, string, flags=0)

MAtch对象的秘籍

方法 说明
.group(0) 获取匹配后的字符串
.start() 匹配字符串在原始字符串的开始位置
.end() 匹配字符串在原始字符串的结束位置
.span() 返回(.start(), .end())

MAtch对象的措施

方法 说明
.group(0) 获取匹配后的字符串
.start() 匹配字符串在原始字符串的开始位置
.end() 匹配字符串在原始字符串的结束位置
.span() 返回(.start(), .end())

re.split(pattern, string, maxsplit=0, flags=0)
maxsplit: 最大分割数,剩余部分作为最终二个成分输出

Re库的贪欲匹配和纤维匹配

Re库的人欲横流相配和纤维相称

re.finditer(pattern, string, flags=0)

野心勃勃相配

Re库默许使用贪婪相配,即出口相配最长的子串。

贪婪相配

Re库暗许使用贪婪相称,即出口相称最长的子串。

re.sub(pattern, repl, string, count=0, flags=0)
repl : 替换相称字符串的字符串
count : 相配的最大替换次数

小小的般配

哪些输出最短的子串呢?

    >>>match = re.search(r.'PY.*?N','PYANBNCNDN')
    >>>match.grop(0)
    'PYAN'

细微相配

怎样输出最短的子串呢?

    >>>match = re.search(r.'PY.*?N','PYANBNCNDN')
    >>>match.grop(0)
    'PYAN'

re库的另一种等价用法
rst=re.search(r'[1-9]\d{五}’) 函数式用法:一回性操作
pat=re.compile(r'[1-9]\d{5}’) rat=pat.search(‘BIT 一千八1’)
面向对象用法:编写翻译后的往往操作

小小相称操作符

操作符 说明
*? 前一个字符0次或无限次扩展,最小匹配
+? 前一个字符1次或无限次扩展,最小匹配
?? 前一个字符0次或1次扩展,最小匹配
{m,n}? 扩展前一个字符m至n次(含n),最小匹配

金沙注册送58 1

微小相配操作符

操作符 说明
*? 前一个字符0次或无限次扩展,最小匹配
+? 前一个字符1次或无限次扩展,最小匹配
?? 前一个字符0次或1次扩展,最小匹配
{m,n}? 扩展前一个字符m至n次(含n),最小匹配

金沙注册送58 2

regex = re.compile(pattern, flags=0)
将正则表明式的字符串情势编写翻译成正则表明式对象
pattern : 正则表明式的字符串或原生字符串表示
flags : 正则表明式使用时的决定标识
例如:regex=re.compile(r'[1-9]\d{5}’)

match对象是1次匹配的结果,蕴含相称的越多音讯
属性 说明
.string:待相称的文书
.re:相称时使用的patter对象(正则表达式)
.pos:正则表明式寻觅文本的启幕地点
.endpos:正则表明式找寻文本的结束地方
.group(0):得到格外后的字符串
.start():相配字符串在原始字符串的上马位置
.end():相配字符串在原始字符串的了断地方
.span():返回(.start(), .end())

Re库的贪婪相称和纤维相称
1、Re库私下认可使用贪婪相称,即出口相称最长的子串
例如:match=re.search(r’PY.*N’,’PYANBNCNDN’)
match.group(0)
‘PYANBNCNDN’
二、最小匹配:只要长度输出或许两样的,都能够因而在操作符后加多?产生最小相配
微小匹配操作符 表达
*?:前三个字符0次或极端次增加,最小相配
+?:前2个字符三次或极端次扩张,最小相称
??:前三个字符0次或3回扩张,最小相配
{m,n}?: 增添前一个字符m至n次(含n),最小相配

相关文章

网站地图xml地图