首页 » InfoTech »

Python正则表达式re模块的用法

2018年5月5日 / 23次阅读
Python

打开支付宝首页,搜索“529018372”,即可领取红包!可重复领。

特色图片

最近因为做BlogChecker,学习并使用了Python的正则表达式re模块(Regular Expression),简单总结一下。

 

首先要大概了解学习一下正则表达式的基本规则:https://docs.python.org/3/library/re.html

>>> import re
>>>
>>> help(re.match)
Help on function match in module re:

match(pattern, string, flags=0)
    Try to apply the pattern at the start of the string, returning
    a match object, or None if no match was found.

>>> help(re.search)
Help on function search in module re:

search(pattern, string, flags=0)
    Scan through string looking for a match to the pattern, returning
    a match object, or None if no match was found.

>>> help(re.findall)
Help on function findall in module re:

findall(pattern, string, flags=0)
    Return a list of all non-overlapping matches in the string.

    If one or more capturing groups are present in the pattern, return
    a list of groups; this will be a list of tuples if the pattern
    has more than one group.

    Empty matches are included in the result.

>>> help(re.split)
Help on function split in module re:

split(pattern, string, maxsplit=0, flags=0)
    Split the source string by the occurrences of the pattern,
    returning a list containing the resulting substrings.  If
    capturing parentheses are used in pattern, then the text of all
    groups in the pattern are also returned as part of the resulting
    list.  If maxsplit is nonzero, at most maxsplit splits occur,
    and the remainder of the string is returned as the final element
    of the list.

>>>

 

引入re模块之后,常用的就以上这三个函数。

match函数是从字符串的开始进行匹配,一旦匹配成功就返回;

search函数在整个字符串内进行匹配,也是一旦匹配成功一个就返回;

findall函数,从名称上来看,就知道这个函数是要在字符串内进行匹配,并且要讲所有的匹配都找出来,成功之后返回一个List对象。注意:findall函数找出来的匹配字符串是non-overlapping的。

split函数用来切割一个字符串,以正则表达式匹配的字符串为切割点,返回也是一个List。

 

以下示例中所使用的re表达式都很简单,仅仅只是展示函数的用法,re表达式写成什么样,要根据自己业务的情况。

match函数的代码示例:

>>> import re
>>> res = re.match('abcd','bcdabcd')
>>> res.group()
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'NoneType' object has no attribute 'group'
>>> res = re.match('abcd','abcdxxxx')
>>> res.group()
'abcd'
>>>

如果匹配不成功,match函数的返回是None

search函数的代码示例:

>>>
>>> res = re.search('abc','bcdabcdxx')
>>> res.group()
'abc'
>>> res = re.search('abc','bcdabcdxxabc')
>>> res.group()
'abc'
>>> res = re.search('abc','abdddddddcccc')
>>> res.group()
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'NoneType' object has no attribute 'group'
>>>

search函数就不局限只从字符串开始的地方匹配,同样 ,如果没有匹配,返回None。

match和search函数,主要用来匹配,返回对象的group函数,可以看到匹配的具体字符串是什么。而findall函数是用来找出所有匹配的字符串。

>>>
>>> res = re.findall('ab?c','xx abc ac ddd')
>>> res
['abc', 'ac']
>>> res = re.findall('ab?c','xx sdddd')
>>> res
[]
>>>

findall函数如果没有匹配,返回的是一个空的List对象。

 

split函数的代码示例:

>>>
>>> res = re.split('\s+','   abcd abcd   abcd   ')
>>> res
['', 'abcd', 'abcd', 'abcd', '']
>>> res = re.split('\s+','   abcd abcd   abcd   '.strip())
>>> res
['abcd', 'abcd', 'abcd']
>>> res = re.split('\s+','cccccccc')
>>> res
['cccccccc']
>>> res = re.split('\s+','')
>>> res
['']
>>>

正则表达式 \s+ 表示一个或多个空格;

string对象的strip()函数可以有效的去掉前后的空格;

如果字符串中没有空格,或者是空串,函数返回字符串自身。

 

None对象在if判断语句中是False,因此,以上几个Python re模块的函数,可以这样使用:

if re.match(re,string):
    # match
else:
    # not match

if not re.match(re,string):
    # not match
else:
    # match
    
if re.search(re,string):
    # match
else:
    # not match

for i in re.findall(re,string):
    # for each single match...
else:
    # no match or after the loop (except break)

从以上代码可以看出,Python代码的可阅读和理解性是很强的。

以上就是麦新杰对Python的正则表达式re模块的一点点使用总结。

本文链接:http://www.maixj.net/ict/python-re-17848
云上小悟 麦新杰(QQ:1093023102)

相关文章

评论是美德

无力满足评论实名制,评论对非实名注册用户关闭,有事QQ:1093023102.


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

栏目

支付宝红包.每天领一次.

支付宝扫码领红包

©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top