Seventeen re模块

 

1、re模块

元字符  匹配内容

\w    匹配字母(包含中文)或数字或下划线

\W      匹配非字母(包含中文)或数字或下划线

\s     匹配任意的空白符

\S    匹配任意非空白符

\d     匹配数字

\D    匹配非数字

 \A    从字符串开头匹配

\Z    匹配字符串的结束,如果是换行,只匹配到换行前的

\n     匹配一个换行符

\t     匹配一个制表符

^     匹配字符串的开始

$     匹配字符串的结尾

.      匹配任意字符,除了换行符,当re.DOTALL标记被指定时,

      则可以匹配包括换行符的任意字符。

[...]     匹配字符组中的字符

[^...]      匹配除了字符组中的字符的所有字符

*      匹配0个或者多个左边的字符

+     匹配一个或者多个左边的字符。

?    匹配0个或者1个左边的字符,非贪婪方式

{n,m}     匹配n到m次由前面的正则表达式定义的片段,贪婪方式

a|b    匹配a或者b

()    匹配括号内的表达式,也表示一个组

# 模板
import re
正则匹配:
 print(re.findall('\d','1234567890 benja *(_'))  # ['1', '2', '3', '4', '5']

重复匹配:
print(re.findall('a.b', 'ab aab a*b a2b a牛b a\nb'))  # ['aab', 'a*b', 'a2b', 'a牛b']

# * 匹配0个或者多个左边字符表达式。 满足贪婪匹配 @@
print(re.findall('ab*', 'ab aab aaab abbbbb'))  # ['ab', 'a', 'ab', 'a', 'a', 'ab', 'abbbbb']

# .*? 此时的?不是对左边的字符进行0次或者1次的匹配,
# 而只是针对.*这种贪婪匹配的模式进行一种限定:告知他要遵从非贪婪匹配 推荐使用!
# print(re.findall('a.*?b', 'ab a1b a*()b, aaaaaab'))  # ['ab', 'a1b', 'a*()b']

 

import re

#1 findall 全部找到返回一个列表。
# print(relx.findall('a', 'alexwusirbarryeval'))  # ['a', 'a', 'a']

# 2 search 只匹配字符串的开始然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
# print(relx.search('sb|alex', 'alex sb sb barry 日天'))  # <_sre.SRE_Match object; span=(0, 4), match='alex'>
# print(relx.search('alex', 'alex sb sb barry 日天').group())  # alex

# 3 match 一直找,不过在字符串开始处进行匹配,完全可以用search+^代替match
# print(relx.match('barry', 'barry alex wusir 日天'))  # <_sre.SRE_Match object; span=(0, 5), match='barry'>
# print(relx.match('barry', 'barry alex wusir 日天').group()) # barry

# 4 split 分割 可按照任意分割符进行分割
# print(relx.split('[ ::,;;,]','alex wusir,日天,太白;女神;肖锋:吴超'))  # ['alex', 'wusir', '日天', '太白', '女神', '肖锋', '吴超']

# 5 sub 替换
# print(relx.sub('barry', '太白', 'barry是最好的讲师,barry就是一个普通老师,请不要将barry当男神对待。'))

# 6
# obj=relx.compile('\d{2}')
# print(obj.search('abc123eeee').group()) #12
# print(obj.findall('abc123eeee')) #['12'],重用了obj
# 命名分组匹配:
ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>")
# #还可以在分组中利用?<name>的形式给分组起名字
# #获取的匹配结果可以直接用group('名字')拿到对应的值
# print(ret.group('tag_name'))  #结果 :h1
# print(ret.group())  #结果 :<h1>hello</h1>

 

posted @ 2019-01-11 16:46  pythonernoob  阅读(120)  评论(0)    收藏  举报