Python之re模块

在python中,re模块是用来处理正则表达式,它能够处理Unicode和普通字符串。

1.常用函数

1.1findall

findall函数在查找匹配时,将匹配的字符串以列表的形式返回,如果没有匹配项,将会返回空列表,而不会抛出异常。

flags=re.IGNORECASE匹配时忽略大小写。

In [1]: import re

In [2]: data = "Python 3.7.7 (default, Apr 26 2020, 20:44:53)"

In [3]: re.findall('python [0-9]\.[0-9]\.[0-9]',data,flags=re.IGNORECASE)
Out[3]: ['Python 3.7.7']

1.2match

match函数类似于字符串中的startwith函数,但是match函数可以处理更加复杂的情况。match函数如果匹配,则会返回一个re.Match类型的对象,如果匹配失败,则会返回一个None。

In [4]: re.match('Python',data)
Out[4]: re.Match object; span=(0, 6), match='Python'

匹配数字开头的字符串:

In [6]: data1 = "23 21:28:25 2020 from 192.168.244.1"
In [7]: re.match('\d+',data1)
Out[7]: re.Match object; span=(0, 2), match='23'

1.3sub

sub函数类似于字符串函数的replace函数,当多个字符串需要替换时,sub函数只需要一次替换,而replace需要多次替换。

In [10]: data2 = "Python 3.7.7 Python 3.7.8"

In [11]: re.sub('[0-9]\.[0-9]\.[0-9]','x.x.x',data2)
Out[11]: 'Python x.x.x Python x.x.x'

1.4split

re模块的split函数和字符串的spilt函数一样,都是将一个字符串分割成子串的列表。内置的split函数通常只能指定一个分隔符,但是re模块的split函数能同时指定多个分割符。

In [12]: re.split(r"[,:\s]",data)
Out[12]: ['Python', '3.7.7', '(default', '', 'Apr', '26', '2020', '', '20', '44', '53)']

2.非贪婪匹配

贪婪匹配总是匹配最长的字符串,非贪婪匹配总是匹配最短的字符串。

匹配以/usr开头/结尾的字符串:

In [15]: data3 = "/usr/local/python-3.7.7/lib/python3.7/site-packages/IPython/core/history.py:226"

In [17]: re.findall('/usr.*\/',data3)
Out[17]: ['/usr/local/python-3.7.7/lib/python3.7/site-packages/IPython/core/']

In [18]: re.findall('/usr.*?\/',data3)
Out[18]: ['/usr/']


「 文章如果对你有帮助,请点个赞哦^^ 」 

1+