关于python3 re正则表达式的学习思路和总结

2017/07/25 Python

re正则表达式,这个东西不学是不行的,基本上涉及到字符处理都需要这项技术,学好了天下无敌啊,哈

可惜,它学起来很繁琐,很麻烦,一直挺头疼(还是懒啊),总结了一些东西免得忘记了

下图是本人的思路 silu

下图是分享网络的总结图,比较全的规则整理 guize

个人认为正则难在写规则嘛,常用函数就熟悉那么几个就够了,无非是习惯问题

1.引入模块

import re

2.建立个字符串案例

a = '123abc456abc'

3.常用正则对象生成函数:re.compile

这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。

第二个参数flag是匹配模式,取值可以使用按位或运算符’ ’表示同时生效,比如re.I re.M。

另外,你也可以在regex字符串中指定模式,比如re.compile(‘pattern’, re.I | re.M)与re.compile(‘(?im)pattern’)是等价的。 可选值有:

  • re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
  • M(MULTILINE): 多行模式,改变’^’和’$’的行为(参见上图)
  • S(DOTALL): 点任意匹配模式,改变’.’的行为
  • L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
  • U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
  • X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的:

4.自己最常用查找函数:re.findall()

re.findall可以获取字符串中所有匹配的字符串。如:re.findall(r’\woo\w’, text);获取字符串中,包含’oo’的所有单词。

r = re.compile(r'\d+')
'''方式一:原始方式'''
re.findall(r'\d+',a)
['123', '456']
'''方式二:利用re的自带函数'''
re.findall(r,a)
['123', '456']
'''方式三:利用对象的方法,可节省编码且反复可用'''
r.findall(a)
['123', '456']

5.常用正则分割函数:re.split

可以使用re.split来分割字符串,如:re.split(r’\s+’, text);将字符串按空格分割成一个单词列表。

re.split(r,a)
['', 'abc', 'abc']
r.split(a)
['', 'abc', 'abc']

6.常用正则替换函数:re.sub

re.sub用于替换字符串中的匹配项。下面一个例子将字符串中的空格 ‘ ‘ 替换成 ‘-’ :

re.sub(r,'ABC',a)
'ABCabcABCabc'
r.sub('ABC',a)
'ABCabcABCabc'

7.常见正则分组问题

除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(Group)

r = re.compile(r'(\d{1})(\d{2})')
re.findall(r,a)
[('1', '23'), ('4', '56')]

以后慢慢补充吧,正则不易,须得多费心。

声明:作者原创,未经同意严禁转载,违者必究

Show Disqus Comments

Search

    欢迎关注我的微信公众号

    闷骚的程序员

    Table of Contents