Luffy Second Modular -- re正则表达式

正则表达式,re模块:

  正则表达式,通过不同的组合方式,提取文本中的字符。

import re
# 1. match 从开头匹配,要求第一个元素必须是符合要求的,不然就匹配不到
# a = 'abc1d3e'
# print(re.match('\d',a))

# 2. search 全局匹配,找到就返回,不会再接着找
# print(re.search('\d',a))

# 3. findall 全局匹配,找到全部符合条件的数据
# print(re.findall('\d',a))

"""
. 匹配任意一个字符,除了\n以外的全部字符
^ 以什么字符开头的,等效于match()
$ 以什么字符结尾的
* 匹配*号前面一个字符的0个或者多个
+ 匹配前面一个字符一次或者多次
?匹配前面一个字符0次或者一次
{m} 匹配前一个字符指定次数
{n,m} 匹配前一个字符n - m 次
[] 
| 或表达式,相当于or [A|a]lex 这个可以匹配alex或者Alex
() 分组表达式,(\d)([a-zA-Z]),123alex 返回123 alex

\A 表示开头 同^
\Z 表示结尾 同$
\d 表示[0-9]
\D 表示非数字
\w 表示[0-9a-zA-Z]
\W 表示非[0-9a-zA-Z]
\s 匹配不可见字符 \n \t \r
'(?P<name>)(?P<age>)',s  用groupdict() 输出,会显示成字典类型,name:****  age:***  分组匹配

re.I 忽略字符串中的大小写
re.M 匹配多行
re.S 改变.的行为,可以匹配任何的字符,不加的时候\n是匹配不到的
re.X 可以给表达式加上注释
re.search('''\d* # 这是匹配0或多个数字的表达式''',re.X)
"""

# 4. re.split 把匹配到的字符作为分隔符将字符串分割开,maxsplit 可以指定分割的次数
s = 'abc1d3e'
# print(re.split('\d+', s,maxsplit=1)) # \d表示数字 + 表示一个或多个

# 5. re.sub 把匹配到的字符替换成其他的, count 可以指定替换的次数,比如替换一次
# print(re.sub('\d+','--',s,count=1))

# 6. re.fullmatch 完全匹配模式,表达式和字符串要完全符合才能匹配上,否则就无法匹配
s = 'songyuheng@qk365.com'
# print(re.fullmatch('\w+@\w+\.(com|cn|edu)',s).group())

# 7. re.compile 先把表达式封装成一个公式并赋值给一个变量,然后通过变量去匹配
pattern = re.compile('\w+@\w+\.(com|cn|edu)')
print(pattern.fullmatch(s).group())

 

posted @ 2019-03-27 15:56  微雨丶  阅读(56)  评论(0)    收藏  举报