Python学习20——re模块

Python学习20——re模块

re模块

常用匹配模式表

模式描述
\w匹配字符数字及下划线
\W匹配非字母数字下划线
\s匹配任意空白字符,等价与[\t\n\r\f]
\S匹配任意非空白字符
\d匹配任意数字,等价于[0-9]
\D匹配任意非数字
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
\z匹配字符串结束
\G匹配最后匹配完成的位置
\n匹配一个换行符
\t匹配一个制表符
^匹配字符串开头
$匹配字符串末尾
.匹配任意字符,除了换行符,当 re.DOTALL 标记被指定时,则可以匹配包括换行符的任意字符
[…]用来表示一组字符,单独列出:[amrk]匹配’a’,‘m’或’k’
[^…]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
*匹配0个或者多个的表达式
+匹配1个或者多个的表达式
?匹配0个或者1个由前面的正则表达式定义的片段,非贪婪方式
{n}精确匹配 n 个前面表达式
{n,m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a丨b匹配 a 到 b
()匹配括号内的表达式,也表示一个组

正则表达式:

由一系列特殊字符拼接而成的表达式/规则,该表达式用于从一个大字符串中匹配出符合规则的子字符串

详解
import re

1、\w : 匹配字母数字及下划线

print(re.findall('\w','h ell o haha_ 0)! 2254 #886'))

2、\W : 匹配非字母数字下划线

print(re.findall('\w','h ell o haha_ 0)! 2254 #886'))

3、 \s :匹配任意空白字符,等价于[\t\n\r\f]

print(re.findall('\w','h ell o haha_ 0)! 2254 #886'))

4、 \S :匹配任意非空字符

print(re.findall('\w','h ell o haha_ 0)! 2254 #886'))

5、 \d :匹配任意数字

print(re.findall('\w','h ell o haha_ 0)! 2254 #886'))

6、 \D :匹配任意非数字

print(re.findall('\w','h ell o haha_ 0)! 2254 #886'))

组合

print(re.findall('a\sd','h ell o hah\na_ 0)! 22\t54 #886 aada da d adada dada dsc '))

7、 \n 与 \t : 匹配一个换行符 或 一个制表符

msg = """
he\tll\n\no 123_ )0
\t1
2
\t3
"""
print(re.findall('\n', msg))
print(re.findall('\t', msg))

8、^ 与 $ :匹配字符串的开头 或 匹配字符串的末尾

print(re.findall('^egon', 'egon sadf 5465413 egon dasfefscccxegon'))
print(re.findall('egon$', 'egon sadf 5465413 egon dasfefscccxegon'))
print(re.findall('^a\w\w\wc$', 'a213c'))      # 总长度为5个

9、| . | [] | * | ? | .*? | + | {n,m} |
9.1 . :匹配任意一个字符,换行符除外

print(re.findall("a\db", "a2b a1b aab aaaaaaaab a+b a-b a\nb a\tb a c"))
print(re.findall("a\wb", "a2b a1b aab aaaaaaaab a+b a-b a\nb a\tb a c"))
print(re.findall("a.b", "a2b a1b aab aaaaaaaab a+b a-b a\nb a\tb a c"))
print(re.findall('a.b', 'a2b a1b aab aaaaaaaab a+b a-b a\nb a\tb a c', re.DOTALL))  # re.DOTALL '.'可以代表所有

9.2 []:代表匹配一个字符,可以指定该字符的范围

print(re.findall("a[+-]b", "a2b a1b aab aaaaaaaab a+b a-b a\nb a\tb a c"))
print(re.findall("a[.*/+-]b", "a2b a*b a1b aab a*aaa/aaaab a.b a/b a+b a-b a\nb a\tb a c"))
print(re.findall("a[0-9]b", "a2b a1b aab aaaaaaaab a+b a-b a\nb a\tb a c"))

9.3 *:匹配0次或者多次

print(re.findall("ab*","a ab abb abbbbbbbbbbbb bbbbbbbbb"))

9.4 +:左边那个字符出现1次或者无穷次

print(re.findall("ab+","a ab abb abbbbbbbbbbbb bbbbbbbbb"))

9.5 {n,m}: 左边那个字符出现n次到m次

print(re.findall("ab{0,}","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab*","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab{1,}","a ab abb abbbbbbbbbbbb bbbbbbbbb"))
print(re.findall("ab+","a ab abb abbbbbbbbbbbb bbbbbbbbb"))

print(re.findall("ab{2,5}","a ab abb abbb abbbb abbbbbbbb abbbbbbbbbbbb bbbbbbbbb"))

9.6 ?:左边那个字符出现0次到1次

print(re.findall("ab?","a ab abb abbbbbbbbbbbb bbbbbbbbb"))

9.7 .*:匹配所有

print(re.findall("a.*b", "123 a1231-==-000b123123123123123b"))

print(re.findall("a.*?b", "123 a1231-==-000b123123123123123b"))   # 非贪婪式

例1:

msg='<a href="https://pan.baidu.com/s/1skWyTT7" target="_blank"><strong><span style="color: #ff0000;">原理图:https://pan.baidu.com/s/1skWyTT7</span></strong></a><a href="https://www.baidu/com">"点我啊"</a>'
print(re.findall('href=".*?"',msg))
print(re.findall('href="(.*?)"',msg))

例2:

print(re.findall("a.*b","a1b a+b a-b a\nb a\tb",re.DOTALL))

10 ():分组

print(re.findall('ab+','ababab123')) #['ab', 'ab', 'ab']
print(re.findall('(ab)+123','ababab123')) #['ab'],匹配到末尾的ab123中的ab

10.1 取消分组

print(re.findall('(?:ab)+123','ababab123')) #findall的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容

11 |:或者

print(re.findall("compan(?:ies|y)","Too many companies have gone bankrupt, and the next one is my company'"))

Too many companies have gone bankrupt, and the next one is my company
                                                          compan(ies|y)

print(re.findall("\d+\.?\d*", "as9fdasldf1111asdf3333dfadf3.4dafadf3.5555asdfsafd.5555"))
  1. \

    print(re.findall(‘a\\c’, ‘a\c alc aac’))

re模块提供的方法介绍

方法介绍
re.findall返回所有满足匹配条件的结果,放在列表里
re.search只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
re.match同search,不过在字符串开始处进行匹配,完全可以用search+^代替match
re.split进行切割
详解
import re

#1、re.findall

print(re.findall('e','alex make love') )   #['e', 'e', 'e']

#2、re.search

print(re.search('e','alex make love'))			#<re.Match object; span=(2, 3), match='e'>
print(re.search('e','alex make love').group())	#['e']

#3、re.match

print(re.match('e','alex make love'))    #None

#4、re.split

print(re.split('[ab]','abcd'))     #['', '', 'cd']
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值