Python网络爬虫与消息提取,正则表明式

1、正则表达式的语法

  • . 表示其他单个字符
  • [] 字符集,对单个字符给出取值范围
  • [^] 非字符集,对单个字符给出排除范围
  • *前贰个字符0次照旧极端次扩展
  • +前1个字符3遍或极端次扩充
  • ?前一个字符0次或3次扩张
  • |左右表达式任意二个
  • {m}扩大前一个字符m次
  • {m,n}扩张前2个字符m至n次
  • ^相称字符串起初
  • $相配字符串结尾
  • ()分组标志,内部只好选择|操作符
  • \d数字,等价于[0-9]
  • \w单词字符,等价于[A-Z,a-z,0-9]

    2、python中re库的行使

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

    ### 2.一、正则表明式字符串的花色

    re库采取raw string类型来表示正则表明式,表示为
    r’text’
    raw
    string是不带有对转义符的双重转义的字符串,总来讲正是string会对字符转义,而raw
    string不会,因为在正则表明中会出现转义符号,所防止止麻烦我们使用raw
    string

    ### 二.二、Re库首要功用函数

  • re.search()在3个字符串中寻觅正则表达式的首先个岗位,重临match对象

  • re.match()从一个字符串的初阶地方起相配正则表明式,重返match对象
  • re.findall()探究字符串,以列表类型重返全部能协作的子串
  • re.split()将一个字符串依照正则表明式相配结果开始展览划分,重返列表类型
  • re.finditer()搜寻字符串,再次来到三个金童玉女结果的迭代类型,每种迭代成分是match对象
  • re.sub()在五个字符串中替换全部相配正则表明式的子串,重回替换后的字符串

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

    在多个字符串中搜索正则表明式的第3个岗位,重回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

正则表明式是二个特殊的字符连串,它能帮助您方便的自小编批评一个字符串是还是不是与某种格局般配。Python
自一.伍版本起扩张了re 模块,它提供 Perl 风格的正则表明式情势。re 模块使
Python 语言具备一切的正则表明式功效。compile
函数依照2个形式字符串和可选的注明参数生成多少个正则表明式对象。该对象拥有一多级措施用高璇则表明式相称和替换。re
模块也提供了与那几个艺术效果完全一致的函数,这一个函数使用三个方式字符串做为它们的首先个参数。

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

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

正则表明式的施用

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

regular expression / regex / RE

正则表明式是3个特种的字符类别,它能协助您方便的反省3个字符串是或不是与某种方式相配。Python
自1.五本子起扩充了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函数是
从字符串开始位置开始匹配,因为从开始位置没有匹配到,所以为空

正则表明式是用来精简表明1组字符串的表明式
正则表明式是1种通用的字符串表明框架
正则表明式是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']

正则表明式在文本处理中丰盛常用:
Python网络爬虫与消息提取,正则表明式。发挥文本类型的特点(病毒、入侵等)
再者搜寻或调换一组字符串
相配字符串的上上下下或局地 最要紧利用在字符串相称中

正则表明式的常用操作符

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

将3个字符串根据正则表明式相配结果进行划分再次来到列表类型

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

在1个字符串中替换全数相配正则表达式的子串再次来到替换后的字符串

  • 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库的另一种等价用法(面向对象)

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库默许使用贪婪相配,即再次回到相配最长的子串

小小的相配

  • *? 前贰个字符0次或极端次扩充,最小相称
  • +? 前二个字符1次或极端次扩张,最小相称
  • ?? 前二个字符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个
{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)

· 将1个字符串根据正则说明式相称结果实行划分,重返列表类型。

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

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)

· 搜索字符串,重回2个相称结果的迭代类型,每一种迭代成分是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():在二个字符串中找寻match正则表明式的第三个任务,重回match对象
re.match():从1个字符串的起始地点起match正则表明式,再次回到match对象
re.findall():找寻字符串,以列表类型重返全体能match的子串
re.split():将1个字符串根据正则表明式match结果实行私分,重返列表类型
re.finditer():搜索字符串,再次回到贰个match结果的迭代类型,各类迭代成分是match对象
re.sub():在3个字符串中替换全体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() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

常用标识以及表明
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库的另1种等价用法
rst=re.search(r'[1-9]\d{5}’) 函数式用法:一遍性操作
pat=re.compile(r'[1-9]\d{5}’) rat=pat.search(‘BIT 一千8壹’)
面向对象用法:编写翻译后的频繁操作

小小的相配操作符

操作符 说明
*? 前一个字符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对象是3次相称的结果,包含相配的越多音信
属性 说明
.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’
2、最小相称:只要长度输出恐怕两样的,都足以经过在操作符后追加?产生最小匹配
微小相称操作符 表明
*?:前1个字符0次或极端次扩展,最小相配
+?:前1个字符3次或极端次扩充,最小匹配
??:前三个字符0次或一遍增添,最小匹配
{m,n}?: 扩张前八个字符m至n次(含n),最小相配

发表评论

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

网站地图xml地图