正则表达式入门-python代码。正则表达式入门-python代码。

题记

本文介绍了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]+.)+[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/)