在python中经过内置的re库来使用正则表达式,它提供了全部正则表达式的功能。html
正则表达式中用“\”表示转义,而python中也用“\”表示转义,当遇到特殊字符须要转义时,你要花费心思到底须要几个“\”,因此为了不这个状况,墙裂推荐使用原生字符串类型(raw string)来书写正则表达式。python
方法很简单,只须要在表达式前面加个“r”便可,以下正则表达式
r'\d{2}-\d{8}'
r'\bt\w*\b'
从字符串的起始位置匹配,匹配成功,返回一个匹配的对象,不然返回Noneshell
语法:re.match(pattern, string, flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等;flags=0表示不进行特殊指定
可选标志以下:函数
修饰符被指定为一个可选的标志。多个标志能够经过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志学习
示例:spa
不含标志位: >>> re.match(r'\d{2}','123') <_sre.SRE_Match object; span=(0, 2), match='12'>
>>> re.match(r'\d{2}','ab123') >>> print(re.match(r'\d{2}','ab123')) None 含有标志位: >>> re.match(r'a','ab123').group() 'a'
>>> re.match(r'a','Ab123').group() Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> re.match(r'a','Ab123').group() AttributeError: 'NoneType' object has no attribute 'group'
>>> re.match(r'a','Ab123',re.I).group() 'A'
扫描整个字符串并返回第一个成功的匹配对象,不然返回Nonecode
语法:re.search(pattern, string, flags=0)
示例:htm
>>> re.search(r'\d{2}','Ab123') <_sre.SRE_Match object; span=(2, 4), match='12'>
>>> re.search(r'\d{2}','Abcde') >>> print(re.search(r'\d{2}','Abcde')) None
能够看到match()和search()返回的时match对象(即匹配对象),能够经过group()方法得到匹配内容对象
>>> re.search(r'\d{2}','Ab12c34d56e78').group() '12' >>> re.match(r'\d{2}','12c34d56e78').group(0) '12'
group() 同group(0)就是匹配正则表达式总体结果,也就是全部匹配到的字符
group()其实更多的结合分组来使用,即若是在正则表达式中定义了分组(什么是分组?参见正则表达式学习,一个左括号“(”,表示一个分组),就能够在match
对象上用group()
方法提取出子串来。后面会单独写一下group()和groups()的用法,这里先简单了解一下。
re.match只匹配字符串的开始,若是字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配(注意:仅仅是第一个)
在字符串中找到正则表达式所匹配的全部子串,并返回一个列表,若是没有找到匹配的,则返回空列表
注意: match 和 search 是匹配一次,而findall 匹配全部
>>> re.findall(r'\d{2}','21c34d56e78') ['21', '34', '56', '78']
和 findall 相似,在字符串中找到正则表达式所匹配的全部子串,并把它们做为一个迭代器返回.
示例:
>>> match = re.finditer(r'\d{2}','21c34d56e78') >>> for t in match: print(t.group()) 21
34
56
78
>>>
根据正则表达式中的分隔符把字符分割为一个列表并返回成功匹配的列表.
示例:
>>> match = re.split(r'\.|-','hello-world.data') # 使用 . 或 - 做为字符串的分隔符 >>> print(match) ['hello', 'world', 'data']
字符串也有split方法,以下,做个对比:
字符串的split方法 >>> 'a b c'.split(' ') # b和c之间有3个空格
['a', 'b', '', '', 'c']
若是用空格很差理解的话,能够换位x >>> 'axbxxxc'.split('x') ['a', 'b', '', '', 'c'] >>>
能够看到,单纯用字符串的split方法没法识别连续的空格,
用正则表示式以下:
>>> re.split(r'\s+', 'a b c') # \s+ 表示匹配一个或多个空白符(\s表示匹配空白符,+表示重复1次或1次以上) ['a', 'b', 'c'] >>>
用于替换字符串中的匹配项
语法: re.sub(pattern, repl, string, count=0)
示例:
>>> match = re.sub(r'a', 'b','aaccaa') # 把字符串中的a都替换为b >>> print(match) bbccbb >>>
参考:https://www.cnblogs.com/yan-lei/p/7653362.html和菜鸟教程