正则表明式入门,正则表明式入门

题记

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。

正则表达式在很多的应用中都有使用到,特别是在网络爬虫中格式化html后取出自己需要的属性,在字符串的匹配和查找中也有很多的应用。

本文主要使用python对正则表达式进行说明,并配合合适的代码。

题记

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。

正则表达式在很多的应用中都有使用到,特别是在网络爬虫中格式化html后取出自己需要的属性,在字符串的匹配和查找中也有很多的应用。

本文主要使用python对正则表达式进行说明,并配合合适的代码。

哪些配合手机号码

正则表明式的条条框框,一起初看的时候,会感到规则太多太乱,毫无规律可寻,看完了多少个例证未来,逐步的意识部分常用的表明式未来,写起前边的规则就便于得多了。

这边以什么样配合手机电话号码为例子

最简便的无绳电话机规律为11个数字,正则表明式为:

\d{11}

这般我们就以为凡事字符串中有11位数字就觉得是手机号码,然则实际中还有其它一些平整,12345678912这也是11个数字,可是大家现在并不会认为他是手机号码,所以更加的把规则写细了。

大家还足以进一步的细分为,13x启幕,14x启幕,17(13678)开首,18x最先,后边再带8位的数字,还有另一种状态是170的事态,其中第四位为[0589]中的一个数,再带7位数字。
表达式可以写为:

(13\d|14[57]|15[^4,\D]|17[13678]|18\d)\d{8}|170[0589]\d{7}

何以配合手机号码

正则表明式的规则,一起先看的时候,会感觉规则太多太乱,毫无规律可寻,看完了多少个例子未来,逐渐的觉察一些常用的表达式将来,写起前面的平整就容易得多了。

此地以如何配合手机电话号码为例子

最简易的无绳电话机规律为11个数字,正则表明式为:

\d{11}

这么大家就以为凡事字符串中有11位数字就觉得是手机号码,可是具体中还有此外一些规则,12345678912这也是11个数字,不过大家现在并不会觉得他是手机号码,所以更加的把规则写细了。

我们还足以进一步的细分为,13x开班,14x开班,17(13678)先导,18x始发,后边再带8位的数字,还有另一种意况是170的场所,其中第四位为[0589]中的一个数,再带7位数字。
表明式可以写为:

(13\d|14[57]|15[^4,\D]|17[13678]|18\d)\d{8}|170[0589]\d{7}

正则表明式语法

俺们刚刚用到的\d
在正则表达式中,代表着数字的意趣,还足以用[0-9]来代表一个数字。语法相比多,不过常用的并不是广大,图中代表的是常见的语法。

字符串匹配:

语法 含义
\d 数字
\D 非数字
\s 空白符
\S 非空白符
\w 单词字符
\W 非单词字符

数据匹配:

语法 含义
* 匹配前面字符0次到无限次
+ 匹配前面字符1次到无限次
匹配前面字符0到1次
{m} 匹配前面字符m次
{m,n} 匹配前面字符m到n次

优秀边界:

语法 含义
^ 匹配字符串开头
$ 匹配字符串末尾

图中的表达式都有特此外例子介绍,可以大体的看看,需要选拔的时候在特意来进展询问。

正则表明式语法

咱俩刚刚用到的\d
在正则表明式中,代表着数字的情趣,还足以用[0-9]来表示一个数字。语法相比较多,不过常用的并不是成千上万,图中意味的是大规模的语法。

字符串匹配:

语法 含义
\d 数字
\D 非数字
\s 空白符
\S 非空白符
\w 单词字符
\W 非单词字符

数量匹配:

语法 含义
* 匹配前面字符0次到无限次
+ 匹配前面字符1次到无限次
匹配前面字符0到1次
{m} 匹配前面字符m次
{m,n} 匹配前面字符m到n次

配合边界:

语法 含义
^ 匹配字符串开头
$ 匹配字符串末尾

图中的表明式都有特意的事例介绍,可以大概的探访,需要利用的时候在特别来展开查询。

python中的re模块

在python中,有特其余模块来担负正则表明式,就是re模块。

python中的re模块

在python中,有特意的模块来负责正则表明式,就是re模块。

字符串是否配合规则

譬如说在用户注册里,大家渴求用户输入的手机号码,符合手机号码的规律,可以用正则表明式来界定。

翻开字符串中
是否有符合要求的字符串,仍旧以刚才的手机号码为例:

import re
str = '15259340987'
# 将正则表达式编译成Pattern对象
pattern = re.compile('152\d{8}')
# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match(str)
if match:
    # 使用Match获得分组信息
    print match.group()

此处可以见见正则表明式,用的是

re.compile('152\d{8}')

本条表明式比

(13\d|14[57]|15[^4,\D]|17[13678]|18\d)\d{8}|170[0589]\d{7}

是严俊极度多的,他只优异,152始发的手机号码,当然表明式可以按照你协调的需要来挑选,这里只是给一个实例。

字符串是否配合规则

比如说在用户注册里,我们渴求用户输入的手机号码,符合手机号码的规律,可以用正则表达式来界定。

查阅字符串中
是否有符合要求的字符串,依然以刚才的手机号码为例:

import re
str = '15259340987'
# 将正则表达式编译成Pattern对象
pattern = re.compile('152\d{8}')
# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match(str)
if match:
    # 使用Match获得分组信息
    print match.group()

这边可以看出正则表达式,用的是

re.compile('152\d{8}')

其一表明式比

(13\d|14[57]|15[^4,\D]|17[13678]|18\d)\d{8}|170[0589]\d{7}

是从严至极多的,他只相当,152上马的手机号码,当然表达式可以依照你自己的内需来抉择,这里只是给一个实例。

找出所有符合规则的字符串

在网页爬虫中,我们需要找出网页的说有链接,用正则匹配就分外容易做到,查看网页源代码中的html,带有网页链接的代码为

href="http://tech.sina.com.cn/t/2017-08-17/doc-ifykcppx8531845.shtml"

正则表明式能够写成:

href="(.*?)"

python代码为:

import re
str = 'href="http://tech.sina.com.cn/t/2017-08-17/doc-ifykcppx8531845.shtml"'
# 匹配
links = re.findall('href="(.*?)"', str)

for link in links:
    print link

# 输出为: 
# http://tech.sina.com.cn/t/2017-08-17/doc-ifykcppx8531845.shtml

找出了装有需要的链接。

找出具有符合规则的字符串

在网页爬虫中,大家需要找出网页的说有链接,用正则匹配就卓殊容易做到,查看网页源代码中的html,带有网页链接的代码为

href="http://tech.sina.com.cn/t/2017-08-17/doc-ifykcppx8531845.shtml"

正则表明式可以写成:

href="(.*?)"

python代码为:

import re
str = 'href="http://tech.sina.com.cn/t/2017-08-17/doc-ifykcppx8531845.shtml"'
# 匹配
links = re.findall('href="(.*?)"', str)

for link in links:
    print link

# 输出为: 
# http://tech.sina.com.cn/t/2017-08-17/doc-ifykcppx8531845.shtml

找出了装有需要的链接。

re模块中一言九鼎的接口

  • re.compile(pattern, flags=0)

    本条情势是Pattern类的厂子方法,用于将字符串形式的正则表明式编译为Pattern对象。
    第二个参数flag是匹配格局,取值可以利用按位或运算符’|’表示还要生效,比如re.I
    |
    re.M。此外,你也足以在regex字符串中指定形式,比如re.compile(‘pattern’,
    re.I | re.M)与re.compile(‘(?im)pattern’)是等价的。

    语句

    prog = re.compile(pattern)
    result = prog.match(string)

    result = re.match(pattern, string)
    相当于,第三种写法较为便利。

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

    本条点子用于查找字符串中可以兼容成功的子串。从string的pos下标处起尝试匹配pattern,假诺pattern截止时仍可配合,则赶回一个Match对象;若不可能配合,则将pos加1后再也尝试匹配;直到pos=endpos时仍不可以配合则赶回None。
    pos和endpos的默认值分别为0和len(string));re.search()不能指定这六个参数,参数flags用于编译pattern时指定匹配形式。

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

    这多少个法子将从string的pos下标处起尝试匹配pattern;假若pattern截至时仍可配合,则赶回一个Match对象;假如配合过程中pattern不可能匹配,或者配合未截至就已到达endpos,则赶回None。
    pos和endpos的默认值分别为0和len(string);re.match()不能指定那六个参数,参数flags用于编译pattern时指定匹配情势。
    留神:这一个主意并不是全然配合。当pattern截至时若string还有剩余字符,如故视为成功。想要完全匹配,能够在表明式末尾加下边界匹配符’$’。

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

    依照可以配合的子串将string分割后回来列表。maxsplit用于指定最大分割次数,不指定将全部分叉。

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

    检索string,以列表形式再次来到全部能匹配的子串。

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

    接纳repl替换string中每一个匹配的子串后回来替换后的字符串。
    当repl是一个字符串时,可以利用\id或\g

re模块中根本的接口

  • re.compile(pattern, flags=0)

    这么些方法是Pattern类的工厂方法,用于将字符串情势的正则表明式编译为Pattern对象。
    第二个参数flag是匹配情势,取值可以选择按位或运算符’|’表示还要生效,比如re.I
    |
    re.M。此外,你也足以在regex字符串中指定格局,比如re.compile(‘pattern’,
    re.I | re.M)与re.compile(‘(?im)pattern’)是等价的。

    语句

    prog = re.compile(pattern)
    result = prog.match(string)

    result = re.match(pattern, string)
    分外,第三种写法较为有利。

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

    那个主意用于查找字符串中可以配合成功的子串。从string的pos下标处起尝试匹配pattern,要是pattern停止时仍可匹配,则赶回一个Match对象;若无法配合,则将pos加1后再度尝试匹配;直到pos=endpos时仍不可以配合则赶回None。
    pos和endpos的默认值分别为0和len(string));re.search()不可以指定这六个参数,参数flags用于编译pattern时指定匹配情势。

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

    其一法子将从string的pos下标处起尝试匹配pattern;倘诺pattern截止时仍可配合,则赶回一个Match对象;倘若匹配过程中pattern不能匹配,或者配合未竣工就已到达endpos,则赶回None。
    pos和endpos的默认值分别为0和len(string);re.match()不能指定这五个参数,参数flags用于编译pattern时指定匹配格局。
    留神:这多少个措施并不是截然配合。当pattern截至时若string还有剩余字符,依然视为成功。想要完全配合,可以在表明式末尾加下面界匹配符’$’。

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

    依据可以配合的子串将string分割后赶回列表。maxsplit用于指定最大分割次数,不指定将一切分叉。

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

    追寻string,以列表情势再次回到全体能匹配的子串。

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

    使用repl替换string中每一个配合的子串后回到替换后的字符串。
    当repl是一个字符串时,可以选择\id或\g

常用的正则表明式语句

  • 匹配邮箱:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}

  • 配合国语:[\u4e00-\u9fa5]

  • 匹配IP(IPV4):(\d+).(\d+).(\d+).(\d+)

  • 分外身份证:\d{15}|\d{17}[0-9Xx]

  • 匹配手机号:(13\d|14[57]|15[^4,\D]|17[13678]|18\d)\d{8}|170[0589]\d{7}

常用的正则表明式语句

  • 非凡邮箱:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]lovebet,+.)+[A-Za-z]{2,14}

  • 匹配闽南语:[\u4e00-\u9fa5]

  • 匹配IP(IPV4):(\d+).(\d+).(\d+).(\d+)

  • 配合身份证:\d{15}|\d{17}[0-9Xx]

  • 匹配手机号:(13\d|14[57]|15[^4,\D]|17[13678]|18\d)\d{8}|170[0589]\d{7}

正则表达式工具

正则表达式语法相比较复杂,起始并未经历的话,调试起来相比较劳累,现在网上有那些的正则表达式工具,能襄助我们快捷的展开考试。有客户端的工具也有web工具,用起来都相比便宜。

用的较多的是RegexBuddy这一款工具,如图,他得以自动的成形各样语言版本的正则表明式的例子:
如下

lovebet 1

更多入门教程可以参考:[http://www.bugingcode.com/python_start/]
(http://www.bugingcode.com/python_start/)

正则表明式工具

正则表明式语法相比复杂,起先并未经验的话,调试起来相比较费心,现在网上有很多的正则表明式工具,能帮助大家连忙的展开试验。有客户端的工具也有web工具,用起来都较为便宜。

用的较多的是RegexBuddy这一款工具,如图,他得以自动的转变各样语言版本的正则表明式的例子:
如下

lovebet 2

更多入门教程可以参考:[http://www.bugingcode.com/python_start/]
(http://www.bugingcode.com/python_start/)

相关文章