为什么引入正则表达式?
使用正则表达式可以用来匹配一类具有相同规则字符串。
使用正则表达式进行匹配的规则如下:
1、单字符:
. : 除换行以外所有字符
[] :[aoe] [a-w] 匹配集合中任意一个字符
\d :数字 [0-9]
\D : 非数字
\w :数字、字母、下划线、中文
\W : 非\w
\s :所有的空白字符
\S : 非空白
2、数量修饰:
* : 任意多次 >=0
+ : 至少1次 >=1
? : 可有可无 0次或者1次
{m} :固定m次
{m,} :至少m次
{m,n} :m-n次
3、边界:
\b \B
$ : 以某某结尾
^ : 以某某开头
4、 分组:
(ab){3}
(){4} 视为一个整体
() 子模式\组模式 \1 \2
5、贪婪模式
.*? .+?
re.I : 忽略大小写
re.M :多行匹配
re.S :单行匹配
1、进行正则匹配查找的方法有三种分别为: match\search\findall
- match:从开头进行匹配,找到就立即返回正则结果对象,没有就返回None
- search:匹配全部内容,任意位置,只要找到,立即返回正则结果对象,没有返回None
- findall:匹配所有内容,返回匹配结果组成的列表,没有返回None
2、进行正则替换的方法:re.sub(正则表达式, 替换内容, 字符串)
3、前两个都是用来处理字符串的方法,还有一种compile()方法,这个方法可以将正则字符串编译成正则表达式对象,在后面的匹配中多次调用。
(1)正则匹配,示例如下:
import re
string = '''love you very much
love she
love her'''
string1 = """<div>春
夏
秋
冬</div>"""
#匹配string里面所有的字符(re.M多行匹配)
pattern1 = re.match(r'^love',string, re.M)
print(pattern1)
#匹配string1里面所有的字符(re.S使.匹配包括换行在内的所有字符)
pattern = re.compile(r'<div>(.*)</div>', re.S)
ret = pattern.findall(string1)
print(ret)
(2)正则替换,示例如下:
#170替换成160
def fn(a):
ret = int(a.group())
return str(ret - 10)
string3 = '我是身高为170的女孩'
pattern = re.compile(r'\d+')
ret = pattern.sub(fn, string3)
print(ret)
#所有的love替换成hate
ret = re.sub(r'love', 'hate', string)
或者:
#所有的love替换成hate
pattern = re.compile(r'^love', re.M)
ret = pattern.sub('hate', string)