Python互联网爬虫与音讯提取,正则表明式

By admin in 4858.com on 2019年4月2日

壹、正则表达式的语法

  • . 代表其他单个字符
  • [] 字符集,对单个字符给出取值范围
  • [^] 非字符集,对单个字符给出排除范围
  • *前三个字符0次依旧极端次扩充
  • +前三个字符叁次或极端次增添
  • ?前一个字符0次或1回扩充
  • |左右表明式任意四个
  • {m}增添前3个字符m次
  • {m,n}伸张前三个字符m至n次
  • ^匹配字符串开端
  • $匹配字符串结尾
  • ()分组标记,内部只好采纳|操作符
  • \d数字,等价于[0-9]
  • \w单词字符,等价于[A-Z,a-z,0-9]

    二、python中re库的选拔

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

    ### 2.一、正则表明式字符串的门类

    re库采取raw string类型来代表正则表达式,表示为
    r’text’
    raw
    string是不含有对转义符的重复员和转业义的字符串,总而言正是string会对字符转义,而raw
    string不会,因为在正则表明中会出现转义符号,所防止止麻烦大家选取raw
    string

    ### 贰.二、Re库重要职能函数

  • re.search()在三个字符串中追寻正则表明式的第二个岗位,重返match对象

  • re.match()从3个字符串的始发地点起匹配正则表明式,再次回到match对象
  • re.findall()摸索字符串,以列表类型重返全体能合营的子串
  • re.split()将一个字符串根据正则说明式匹配结果开始展览剪切,再次回到列表类型
  • re.finditer()探寻字符串,重回一个至极结果的迭代类型,各样迭代成分是match对象
  • re.sub()在3个字符串中替换全体匹配正则表明式的子串,再次回到替换后的字符串

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

    在贰个字符串中搜寻正则表明式的首先个岗位,重返match对象

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

  • string : 待匹配字符串
  • flags : 正则表明式使用时的控制标记
    • re.I re.IGNORECASE
      忽略正则表明式的轻重写,[A‐Z]Python互联网爬虫与音讯提取,正则表明式。能够包容小写字符
    • re.M re.MULTILINE
      正则表明式中的^操作符能够将给定字符串的每行当作匹配起来
    • re.S re.DOTALL
      正则表明式中的.操作符能够合营全部字符,暗中同意匹配除换行外的具有字符

举例表明:

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个字符串是或不是与某种形式匹配。Python
自一.5本子起扩展了re 模块,它提供 Perl 风格的正则表明式情势。re 模块使
Python 语言拥有一切的正则表明式作用。compile
函数依据二个格局字符串和可选的申明参数生成1个正则表明式对象。该对象拥有1多元措施用孙铎则表明式匹配和替换。re
模块也提供了与这么些措施效果完全1致的函数,这么些函数使用一个形式字符串做为它们的首先个参数。

正则表明式在文本处理中相当常用

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

正则表明式的选取

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

regular expression / regex / RE

正则表明式是3个特殊的字符系列,它能援救您方便的检查八个字符串是不是与某种方式匹配。Python
自一.伍版本起增添了re 模块,它提供 Perl 风格的正则表明式格局。re 模块使
Python 语言拥有一切的正则表达式作用。compile
函数依照二个情势字符串和可选的申明参数生成1个正则表达式对象。该对象拥有壹层层措施用高满堂则表达式匹配和替换。re
模块也提供了与那几个措施效果完全一致的函数,那一个函数使用3个格局字符串做为它们的率先个参数。

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

· 表明文本类型的表征(病毒、侵略等)

正则表达式的利用

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

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

从2个字符串的初步地方起匹配正则表明式,重回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 : 最大分割数,剩余部分作为最后二个要素输出
    举例表达 :

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)

搜索字符串,再次回到2个合作结果的迭代类型,各个迭代成分是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对象是是二遍匹配的结果,包涵匹配的浩大音信

以下是Match对象的属性

  • .string 待匹配的公文
  • .re 匹配时使用的patter对象(正则表达式)
  • .pos 正则表明式搜索文本的始发地方
  • .endpos 正则表明式搜索文本的终止地方

以下是Match对象的法子

  • .group(0) 获得非常后的字符串
  • .start() 匹配字符串在原始字符串的始发地点
  • .end() 匹配字符串在原始字符串的终止地点
  • .span() 返回(.start(), .end())

    二.五Re库的唯利是图匹配和纤维匹配

    当正则表明式能够合作犬牙相制的多项时,重临哪二个呢?Re库默许使用贪婪匹配,即重回匹配最长的子串

微小匹配

  • *? 前1个字符0次或极端次扩大,最小匹配
  • +? 前三个字符1次或极端次扩展,最小匹配
  • ?? 前二个字符0次或二回扩充,最小匹配
  • {m,n}? 扩大前二个字符m至n次(含n),最小匹配

倘若长度输出恐怕差异的,都足以因而在操作符后净增?变成最小匹配

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

· 在2个字符串中找找匹配正则表明式的首先个职责,重临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 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符
  • 前一个字符2次或极端次扩大

re.match()

re.match()

? 前二个字符0次或3回扩张
| 左右表明式任意多个
{m} 扩大前1个字符m次
{m,n} 增加前3个字符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]+$ 由2陆个假名和数字组成的字符串
^‐?\d+$ 整数方式的字符串
^[0‐9][1‐9][0‐9]$ 正整数情势的字符串
[1‐9]\d{伍} 中夏族民共和国国内邮政编码五人
[\u4e00‐\u9fa5] 匹配普通话字符
\d{3}‐\d{8}|\d{4}‐\d{七} 国内电话号码

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

· 将二个字符串依照正则表明式匹配结果开始展览剪切,重临列表类型。

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

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

· 将三个字符串依据正则表明式匹配结果进行私分,再次来到列表类型。

  • maxsplit:最大分隔数,剩余部分作为最终1个成分输出

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)

· 在3个字符串中替换全部匹配正则表明式的子串,再次来到替换后的字符串。

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

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

· 在3个字符串中替换全数匹配正则表明式的子串,再次回到替换后的字符串。

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

Re库主要职能函数
re.search():在一个字符串中搜索match正则表明式的首先个岗位,再次回到match对象
re.match():从一个字符串的发轫地方起match正则表达式,重临match对象
re.findall():搜索字符串,以列表类型再次回到全部能match的子串
re.split():将五个字符串依照正则表达式match结果实行划分,再次来到列表类型
re.finditer():搜索字符串,重临二个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库的另一种等价用法

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

Re库的另1种等价用法

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

常用标记以及表明
4858.com,re.I re.IGNORECASE:忽略正则表明式的大小写
re.M
re.MULTILINE:正则表明式中的^操作符能够将给定字符串的每行当做match伊始
re.S
re.DOTALL:正则表达式中的.操作符能够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对象的不2秘籍

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

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

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 10008一’)
面向对象用法:编写翻译后的频繁操作

小小的匹配操作符

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

4858.com 1

微小匹配操作符

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

4858.com 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’
二、最小匹配:只要长度输出只怕分歧的,都足以通过在操作符后扩充?变成最小匹配
小小的匹配操作符 表达
*?:前四个字符0次或极端次扩大,最小匹配
+?:前3个字符2遍或极端次扩充,最小匹配
??:前二个字符0次或二次扩张,最小匹配
{m,n}?: 扩张前一个字符m至n次(含n),最小匹配

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有