import re

# 查找abc
print(re.findall('abc', 'xxxxabcxxxabcxxxx')) #['abc', 'abc']

# 查找top或tip
print(re.findall('t[io]p', 'top ttp ppt tip iip')) #['top', 'tip']

#前面有‘aa’
print(re.findall('^aa', 'aabbcc')) #['aa']

#后面有‘cc’
print(re.findall('cc$', 'aabbcc')) #['cc']

print(re.findall('[a-z]', 'a123B')) #['a']
print(re.findall('[A-Z]', 'a123B')) #['B']

# 编译正则表达式,运行速度更快
rl = r"\d{3}"
p = re.compile(rl) # 编译
print(p.findall('12345')) #['123']

#替换
print(re.subn('a', 'A' , 'abc')) #('Abc', 1)

# 拆分
print(re.split('[\+\-\*\/]',' 1+2-3*4/5')) #[' 1', '2', '3', '4', '5']

#re.M匹配多行,貌似不加第三个参数也可以呢?
s = """
hehe xixi
xixi hehe
xixi haha
"""
print(re.findall('hehe', s, re.M)) #['hehe', 'hehe']


# 换行的正则表达式要加上re.X,否则无法匹配
re1 = r"""
\d{3,4}
-?
\d{8}
"""
print(re.findall(re1, '010-12345678', re.X)) #['010-12345678']

# 正则表达式的分组,括号表示,findall会优先返回分组里面的数据
#备注:表达式有点问题
print(re.findall(r"\w{3}@\w+(\.com|\.cn)", 'abc@q.com'))


# 利用分组优先获取想要的内容
# 表达式有待改进
s = r"""
<a href="http://www.baidu.com/" >百度</a>
<a href="http://www.google.com/" >谷歌</a>
"""
#没有使用分组,"href="也返回了
print(re.findall(r'href=".+', s, re.M)) #['href="http://www.baidu.com/" >百度</a>', 'href="http://www.google.com/" >谷歌</a>']
#使用了分组,"href="不返回了
print(re.findall(r'href="(.+)', s, re.M)) #['http://www.baidu.com/" >百度</a>', 'http://www.google.com/" >谷歌</a>']


你可能感兴趣的文章