威尼斯人线上娱乐

正则表达式,Python互连网爬虫与新闻提取

17 4月 , 2019  

一、正则表明式的语法

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

    贰、python中re库的利用

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

    ### 二.1、正则表达式字符串的花色

    re库选取raw string类型来表示正则表达式,表示为
    r’text’
    raw
    string是不带有对转义符的双重转义的字符串,总来讲正是string会对字符转义,而raw
    string不会,因为在正则表明中会现身转义符号,所以幸免麻烦大家应用raw
    string

    ### 二.二、Re库主要功能函数

  • 正则表达式,Python互连网爬虫与新闻提取。re.search()在三个字符串中查究正则说明式的率先个职责,再次来到match对象

  • re.match()从3个字符串的上马地方起匹配正则表明式,再次回到match对象
  • re.findall()寻觅字符串,以列表类型再次来到全体能协作的子串
  • re.split()将3个字符串根据正则表明式相称结果开始展览剪切,重临列表类型
  • re.finditer()查究字符串,再次回到3个男才女貌结果的迭代类型,每一个迭代成分是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.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

正则表明式是叁个不一致平日的字符连串,它能帮助你方便的检讨三个字符串是还是不是与某种方式相称。Python
自1.5版本起增添了re 模块,它提供 Perl 风格的正则表明式方式。re 模块使
Python 语言具有全方位的正则说明式功效。compile
函数依照多少个方式字符串和可选的申明参数生成贰个正则表明式对象。该对象具备壹多级措施用李碧华则表达式相配和替换。re
模块也提供了与那么些艺术效果完全壹致的函数,那些函数使用叁个形式字符串做为它们的第一个参数。

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

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

正则表明式的行使

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

regular expression / regex / RE

正则表明式是一个新鲜的字符系列,它能协理您方便的检讨3个字符串是不是与某种方式相称。Python
自一.五本子起增添了re 模块,它提供 Perl 风格的正则表明式情势。re 模块使
Python 语言具有一切的正则表明式成效。compile
函数依据1个方式字符串和可选的标记参数生成1个正则表明式对象。该对象具有一层层措施用周丽娟则表明式相配和替换。re
模块也提供了与那个方法效果完全1致的函数,那几个函数使用一个格局字符串做为它们的第1个参数。

正则表明式在文本处理中这一个常用

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

正则表明式的应用

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

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 : 最大分割数,剩余部分作为最终两个要素输出
    举例表达 :

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

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对象是是1回相称的结果,包括匹配的累累消息

以下是Match对象的性质

  • .string 待相称的文本
  • .re 匹配时使用的patter对象(正则表明式)
  • .pos 正则表明式寻找文本的启幕地点
  • .endpos 正则表达式找寻文本的停止地点

以下是Match对象的格局

  • .group(0) 获得至极后的字符串
  • .start() 匹配字符串在原始字符串的启幕地方
  • .end() 相配字符串在原始字符串的甘休地点
  • .span() 返回(.start(), .end())

    2.伍Re库的贪欲相称和微小相称

    当正则表明式能够协作长短不一致的多项时,再次回到哪3个吧?Re库暗许使用贪婪相称,即重返相配最长的子串

小小相称

  • *? 前三个字符0次或极端次扩充,最小相配
  • +? 前1个字符二遍或极端次扩张,最小相配
  • ?? 前一个字符0次或3回扩展,最小相称
  • {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次或三回扩大
| 左右表明式任意二个
威尼斯人线上娱乐,{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]+$ 由2伍个字母和数字组合的字符串
^‐?\d+$ 整数格局的字符串
^[0‐9][1‐9][0‐9]$ 正整数方式的字符串
[1‐9]\d{5} 中中原人民共和国境内邮政编码八位
[\u4e00‐\u9fa5] 相称中文字符
\d{3}‐\d{8}|\d{4}‐\d{7} 国内电话号码

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

· 将2个字符串依照正则表明式相配结果实行剪切,重临列表类型。

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

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

· 将3个字符串遵照正则表明式匹配结果举行私分,重回列表类型。

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

· 寻觅字符串,再次回到1个合作结果的迭代类型,各样迭代成分是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)

· 在1个字符串中替换全部相配正则表明式的子串,重回替换后的字符串。

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

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

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

  • 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库的另一种等价用法

函数 说明
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: 最大分割数,剩余部分作为最后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{伍}’) rat=pat.search(‘BIT 一千八壹’)
面向对象用法:编写翻译后的多次操作

微小相称操作符

操作符 说明
*? 前一个字符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’
二、最小匹配:只要长度输出大概分歧的,都足以通过在操作符后扩展?产生最小相称
小小的相配操作符 表明
*?:前1个字符0次或极端次扩充,最小相配
+?:前一个字符二次或极端次扩充,最小相称
??:前八个字符0次或二次扩展,最小相称
{m,n}?: 扩充前二个字符m至n次(含n),最小相称


相关文章

发表评论

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

网站地图xml地图