正则表达式,Python互连网爬虫与音信提取

一、正则表明式的语法

  • . 代表其他单个字符
  • [] 字符集,对单个字符给出取值范围
  • [^] 非字符集,对单个字符给出排除范围
  • *前1个字符0次还是最棒次扩张
  • +前三个字符贰回或极端次扩大
  • ?前1个字符0次或三遍增加
  • |左右说明式任意贰个
  • {m}扩充前1个字符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()从四个字符串的启幕地方起相配正则表明式,再次回到match对象
  • re.findall()寻觅字符串,以列表类型重回全体能同盟的子串
  • re.split()将多个字符串遵照正则表明式相称结果举办私分,重回列表类型
  • re.finditer()招来字符串,再次回到二个十二分结果的迭代类型,各个迭代成分是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

正则表达式是3个十一分的字符体系,它能帮忙您方便的自小编批评二个字符串是或不是与某种情势相配。Python
自一.5版本起扩大了re 模块,它提供 Perl 风格的正则表明式方式。re 模块使
Python 语言具备壹切的正则表明式成效。compile
函数依据3个方式字符串和可选的注明参数生成3个正则表明式对象。该对象具有1密密麻麻措施用李有贞则表达式相配和替换。re
模块也提供了与那一个主意效果完全壹致的函数,那几个函数使用三个情势字符串做为它们的第3个参数。

正则表明式在文本处理中尤其常用

· 表达文本类型的表征(病毒、凌犯等)

正则表达式的运用

正则表达式,Python互连网爬虫与音信提取。· 编写翻译:将适合正则表明式语法的字符串调换成正则表明式特征。

regular expression / regex / RE

正则表达式是2个新鲜的字符类别,它能支持您方便的自我批评三个字符串是不是与某种形式相配。Python
自1.5版本起扩大了re 模块,它提供 Perl 风格的正则表明式格局。re 模块使
Python 语言具备壹切的正则表明式功效。compile
函数依照贰个方式字符串和可选的注脚参数生成二个正则表明式对象。该对象具备1三种措施用李樯则表明式相称和替换。re
模块也提供了与这个主意效果完全壹致的函数,那些函数使用三个格局字符串做为它们的首先个参数。

正则表明式在文本处理中尤其常用

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

正则表明式的选取

· 编写翻译:将适合正则表达式语法的字符串转变到正则表明式特征。

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

从3个字符串的始发地点起相称正则表明式,重临match对象
参数同search函数
举例表达:

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

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

正则表达式是用来轻松表达一组字符串的表达式
正则表达式是壹种通用的字符串表明框架
正则表明式是一种针对字符串表明”简洁”和”特征”观念的工具
正则表达式能够用来判断某字符串的特征归属

正则表达式的语法

正则表达式的语法

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']

正则表达式在文本处理中越发常用:
公布文本类型的风味(病毒、侵略等)
与此同时搜寻或调换1组字符串
相称字符串的方方面面或局地 最主要行使在字符串匹配中

正则表明式的常用操作符

操作符 说明 实例
. 表示任何单个字符  
[] 字符集,对单个字符给出取值范围 [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)

将1个字符串依照正则表明式匹配结果进行私分重返列表类型

  • maxsplit : 最大分割数,剩余部分作为最终一个成分输出
    举例表明 :

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]

二.三Re库的另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())

    2.五Re库的不知恩义相称和微小相称

    当正则表明式可以相称犬牙交错的多项时,重临哪三个吧?Re库暗中认可使用贪婪匹配,即重临相称最长的子串

小小相称

  • *? 前1个字符0次或极端次扩充,最小匹配
  • +? 前贰个字符三次或极端次扩张,最小相称
  • ?? 前三个字符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:正则表明式使用时的垄断(monopoly)标识
常用标记 说明
re.I re.IGNORECASE 忽略正则表达式的大小写,[A-Z]能够匹配小写字符
re.M re.MULTILINE 正则表达式中的^操作符能够将给定的字符串的每行当作匹配开始
re.S re.DOTALL 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符
  • 前一个字符三遍或极端次扩展

re.match()

re.match()

? 前四个字符0次或二回扩张
| 左右表达式任意二个
{m} 扩张前3个字符m次
{m,n} 扩充前1个字符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{五} 中华夏族民共和国国内邮编七位
[\u4e00‐\u9fa5] 相配普通话字符
\d{3}‐\d{8}|\d{4}‐\d{7} 国内电话号码

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

· 将叁个字符串遵照正则表明式相配结果开始展览剪切,再次回到列表类型。

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

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

· 将3个字符串依据正则表明式相配结果进行私分,重临列表类型。

  • 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)

· 找出字符串,重回三个男才女貌结果的迭代类型,每种迭代成分是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)

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

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

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

· 在一个字符串中替换所有相称正则表明式的子串,重临替换后的字符串。

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

Re库首要功能函数
re.search():在3个字符串中搜索match正则表明式的首先个职分,重临match对象
re.match():从1个字符串的启幕地方起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{五}’) rat=pat.search(‘BIT 1000捌壹’)
面向对象用法:编写翻译后的屡屡操作

细微相配操作符

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

亚洲必赢官网 1

小小的相称操作符

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

亚洲必赢官网 2

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

match对象是三回相配的结果,包括相称的越来越多消息
属性 说明
.string:待相称的文件
.re:相称时使用的patter对象(正则说明式)
.pos:正则表明式搜索文本的伊始地点
.endpos:正则表达式寻觅文本的扫尾地点
.group(0):获得卓殊后的字符串
.start():相称字符串在原始字符串的初步地点
.end():匹配字符串在原始字符串的实现地点
.span():返回(.start(), .end())

Re库的一掷千金相配和微小相配
壹、Re库默许使用贪婪相配,即出口相配最长的子串
例如:match=re.search(r’PY.*N’,’PYANBNCNDN’)
match.group(0)
‘PYANBNCNDN’
二、最小相称:只要长度输出也许不一样的,都得以因而在操作符后净增?形成最小相配
细微相称操作符 表明
*?:前2个字符0次或极端次扩充,最小相配
+?:前二个字符二次或极端次扩张,最小匹配
??:前八个字符0次或2次增加,最小相配
{m,n}?: 扩大前一个字符m至n次(含n),最小相配

网站地图xml地图