美文网首页生活不易 我用pythonPython 运维
Python的正则表达式初探笔记

Python的正则表达式初探笔记

作者: 相关函数 | 来源:发表于2017-03-27 13:32 被阅读82次

本文主要介绍Python正则表达式中的元字符的使用,元字符也就是 \ ^ $ * + . | ? {} [] ()这些字符.

RE模块

Python中的正则表达式是通过re模块来使用的.所以在使用正则表达式的时候需要先import re导入re模块.

re.match()

re.match尝试从字符串的开始匹配.re.match的函数模型为:re.match(pattern, string, flags),
第一个参数是是正则表达式;第二个参数是被匹配的字符串;第三个参数是标识位,用来控制匹配方式,比如大小写的区分等.
使用re.match匹配从头开始匹配,如果匹配成功则返回一个match,否则返回none.

re.search()

re.search在整个字符串中进行查找,如果找到第一个就开始返回,然后不会在进行继续匹配.如果没有找到则返回none.re.search的函数模型跟re.match是一样的,他们唯一的区别就是match会一直进行匹配知道字符串结尾,而re.search一旦查找匹配到一个就会停止查找匹配,直接返回查找到的第一个.

re.findall()

re.findall可以获取字符串中所有匹配的字符串.

re.sub()

re.sub是用于替换字符串,它的函数模型是re.sub(parrern, replace, string, flags),除了第二个参数是替换的字符串之外其他的参数都同re.match()

re.compile()

re.compile()是将正则表达式的字符串编译成一个正则表达式对象.

matchObject的属性

在匹配得到的matchObject对象中有几个常用属性.

group()用于返回被re匹配的字符串,他可以传递参数来取得匹配完成之后的列表的某一个元素.

start() 返回匹配的开始位置

end() 返回匹配的结束位置

span() 返回一个包含匹配的开始和结束位置的元组.

\

\反斜杠后面可以加不同的字符以表示特殊意义。 也可用于取消所有元字符,变为普通符号。
\d 匹配任何十进制数:相当于[0-9]
\D 匹配任何非数字字符:相当于 [^0-9]
\s 匹配任何空白字符:相当于 [\t\n\r\f\v]
\S 匹配任何非空白字符:相当于 [^\t\n\r\f\v]
\w 匹配任何字母数字下划线字符:相当于[a-zA-Z0-9_]
\W 匹配任何非字母数字下划线字符:相当于[^a-zA-Z0-9_]

例如:

>>> import re
>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbr'
>>> pattern1 = re.compile(r'\d')
>>> print(re.findall(pattern1, key))
['6', '7', '5', '8', '2', '4', '1', '2', '3', '1', '2', '3', '4']


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbr'
>>> pattern1 = re.compile(r'\D')
>>> print(re.findall(pattern1, key))
['a', 's', 'd', 'h', 'f', 'l', 'a', 's', 'd', 'h', 'j', 'k', 'l', 'o', 'h', 'j', 'k', 'w', 'a', 's', 'b', 'd', 'f', 'w', 'o', 'v', 'h', 'j', ',', 'v', 'h', 'w', 'j', 'b', 'r']


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'\s')
>>> print(re.findall(pattern1, key))
[' ', ' ', ' ', ' ']


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'\W')
>>> print(re.findall(pattern1, key))
[',', ' ', ' ', ' ', ' ']

^

^ 表示字符串的开头.从开头位置匹配字符串.匹配成功返回匹配的字符串,失败则返回空.但是他在[]内部则表示取反.

例如:

>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'^asd')
>>> print(re.findall(pattern1, key))
['asd']


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'^asg')
>>> print(re.findall(pattern1, key))
[]


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'[^a-z]')
>>> print(re.findall(pattern1, key))
['6', '7', '5', '8', '2', '4', '1', '2', '3', ',', '1', '2', '3', '4', ' ', ' ', ' ', ' ']

$

$ 表示匹配字符串的末尾,在多行情况下换行\n也是末尾,即每一行都是字符串的末尾.

*

* 指定前一个字符可以匹配0次或者多次,而不是只有1次,匹配结果会尽可能的重复多次最大不超过20亿次.(后面若加?变为非贪婪模式仅匹配0次)

例如:

>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'asd*')
>>> print(re.findall(pattern1, key))
['asd', 'asd', 'as']

+

  • 匹配前一个字符1次或者多次.(后面若加问号?变为非贪婪模式仅匹配1次)

例如:

>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'asd+')
>>> print(re.findall(pattern1, key))
['asd', 'asd']

.

. 能匹配任意一个字符,若需要匹配 . 本身需要使用 \ 做转义.

例如:

>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'^.+?$')
>>> print(re.findall(pattern1, key))
['asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg ']

|

| 代表左右表达式任意匹配一个.比如:a|b 匹配a或者匹配b. 如果有一个表达式不成立则匹配成立的那个.

例如:

>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'^.+?$|[^\d]')
>>> print(re.findall(pattern1, key))
['asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg ']


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'[^\d]|^.+?$')                                       >>> print(re.findall(pattern1, key))
['a', 's', 'd', 'h', 'f', 'l', 'a', 's', 'd', 'h', 'j', 'k', 'l', 'o', 'h', 'j', 'k', 'w', 'a', 's', 'b', 'd', 'f', 'w', 'o', 'v', 'h', 'j', ',', 'v', 'h', 'w', 'j', 'b', 'r', 's', ' ', 's', 'h', 'd', 'k', 'f', ' ', ' ', 'h', 's', 'k', 'l', 'j', 'h', 'd', 'f', 'g', ' ']


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'a|b')
>>> print(re.findall(pattern1, key))
['a', 'a', 'a', 'b', 'b']

?

?匹配前一个字符0次或者1次.(后面若加?变为非贪婪模式仅匹配0次.)?可以使python原本的贪婪模式变为非贪婪模式.

{}

{m} m是数字,表示重复前一个字符m次.
{m,n} 表示重复前一个字符m-n次.若省略m则表示0-n次,若省略n表示m到无限次.(后面若加?变为非贪婪模式仅匹配0次:ab{2,100}?结果为abb)

例如:

>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'[a-z]{2}')
>>> print(re.findall(pattern1, key))
['as', 'dh', 'fl', 'as', 'dh', 'jk', 'oh', 'jk', 'wa', 'sb', 'df', 'vh', 'vh', 'wj', 'br', 'sh', 'dk', 'hs', 'kl', 'jh', 'df']


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'[a-z]{2,4}')
>>> print(re.findall(pattern1, key))
['asdh', 'flas', 'dhjk', 'ohjk', 'wasb', 'df', 'vhj', 'vhwj', 'brs', 'shdk', 'hskl', 'jhdf']


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'[a-z]{,4}')
>>> print(re.findall(pattern1, key))
['asdh', 'flas', 'dhjk', 'l', '', '', '', '', 'ohjk', 'wasb', 'df', '', 'w', '', '', '', 'o', '', 'vhj', '', '', '', '', '', 'vhwj', 'brs', '', 'shdk', 'f', '', '', 'hskl', 'jhdf', 'g', '', '']


>>> key = 'asdhflasdhjkl6758ohjkwasbdf2w412o3vhj,1234vhwjbrs shdkf  hskljhdfg '
>>> pattern1 = re.compile(r'[a-z]{0,}')
>>> print(re.findall(pattern1, key))
['asdhflasdhjkl', '', '', '', '', 'ohjkwasbdf', '', 'w', '', '', '', 'o', '', 'vhj', '', '', '', '', '', 'vhwjbrs', '', 'shdkf', '', '', 'hskljhdfg', '', '']

[]

[]常用来指定一个字符集,如:[a-z],这里面所有的字母会被一一匹配.上述表达式中常用,例子可以查看上述...

()

(...)将正则表达式分组,每个分组为一个整体,将优先返回分组内的数据.

常用正则表达式

相关文章

  • Python源码剖析笔记3-Python执行原理初探

    Python源码剖析笔记3-Python执行原理初探 之前写了几篇源码剖析笔记,然而慢慢觉得没有从一个宏观的角度理...

  • Python ☞ day 11

    Python学习笔记之 正则表达式 re模块概述:Python自1.5以后增加了re的模块,提供了正则表达式模式...

  • Python的正则表达式初探笔记

    本文主要介绍Python正则表达式中的元字符的使用,元字符也就是 \ ^ $ * + . | ? {} [] ()...

  • 正则表达式

    python学习笔记-正则表达式 标签 : python 特殊符号和字符 re模块:核心函数和方法

  • 正则表达式

    Python正则表达式初识(一) Python正则表达式初识(二) Python正则表达式初识(三) Python...

  • 正则表达式

    Python:正则表达式Python:正则表达式

  • 爬虫基础系列正则表达式——爬取简书个人文章标题

    正则表达式简单介绍 正则表达式我在VBA中有详细的阐述《VBA正则笔记》,在python语言中,它的方法与VBA大...

  • 2018-07-02Python数组

    Python基础学习-Python中最常见括号()、[]、{}的区别 NumPy数组(1、数组初探) Python...

  • Python正则表达式指南

    Python正则表达式指南 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达...

  • 正则表达式

    笔记 正则表达式:用来做字符串查找、匹配、切割用的一种工具。 python对正则表达式的支持:提供了re模块(py...

网友评论

    本文标题:Python的正则表达式初探笔记

    本文链接:https://www.haomeiwen.com/subject/ybalottx.html