re正则表达式,这个东西不学是不行的,基本上涉及到字符处理都需要这项技术,学好了天下无敌啊,哈
可惜,它学起来很繁琐,很麻烦,一直挺头疼(还是懒啊),总结了一些东西免得忘记了
下图是本人的思路
下图是分享网络的总结图,比较全的规则整理
个人认为正则难在写规则嘛,常用函数就熟悉那么几个就够了,无非是习惯问题
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')]
以后慢慢补充吧,正则不易,须得多费心。
声明:作者原创,未经同意严禁转载,违者必究