正则re模块

目录

-正则

-修饰符

 -常用匹配模式

--示例

-一些正则匹配表达式


-正则

正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。

re提供的方法有:

import re
re.match       '''从开始位置开始匹配,如果开头没有则无'''
re.search      '''搜索整个字符串'''
re.findall     '''搜索整个字符串,返回一个list''' 

-修饰符

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。

修饰符为一个可选的标志  多个标志可以通过|来指定。如 re.L | re.M

re.search(r'[a-z]+','ajfoavnoaejgN1234ab9').group()        #返回'ajfoavnoaejg'
re.search(r'[a-z]+','jafjiNfhfheiHD1234a', re.I).group()   #返回'jafjiNfhfheiHD' 对大小写不敏感

 -常用匹配模式

模式概述
\w匹配字母数字下划线
\W匹配非字母数字下划线
\s匹配任意空白字符,<==> [\t\n\r\f]

\S

匹配任意非空字符
\d匹配任意数字,<==> [0-9]
\D匹配任意非数字
\n匹配一个换行符
\t匹配一个制表符
^匹配什么开头
$匹配什么结尾
.匹配任意字符(除了\n),当re.DOTALL被指定后,则包括\n
*匹配0或多个表达式
+匹配1或多个表达式
?匹配0或1个表达式,非贪婪
{n}精确匹配n个前面的表达式
{m,n}匹配m~n个前面的表达式,贪婪
a|b

匹配a或b

()匹配括号内的表达式,分组
[...]用来表示一组字符,单独列出,[abc]匹配'a','b','c'
[^...]不在[]中的字符,[^abc]匹配除了abc的字符
\G匹配最后匹配完成的位置

--示例

• \w与\W
print(re.findall('\w','hello weer 123'))       #['h', 'e', 'l', 'l', 'o', 'w', 'e', 'e', 'r', '1', '2', '3']
print(re.findall('\W','hello weer 123'))       #[' ', ' ']

• \s与\S
print(re.findall('\s','he\rllo\twmq\naj_12'))          #['\r', '\t', '\n']
print(re.findall(r'\n','he\rllo\twmq\naj_12'))          #['\n']
'''r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理,不要转义'''
print(re.findall('\S','he\rllo\twmq\naj_12'))    #['h', 'e', 'l', 'l', 'o', 'w', 'm', 'q', 'a', 'j', '_', '1', '2']
# \n \t \r都是空,都可以被\s匹配
print(re.findall('\s','hello \n weer \t 123'))        #[' ', '\n', ' ', ' ', '\t', ' ']

• \d与\D
print(re.findall('\d','hello weer 123'))          #['1', '2', '3']
print(re.findall('\D','hello weer 123'))         #['h', 'e', 'l', 'l', 'o', ' ', 'e', 'g', 'o', 'n', ' ']

• ^与$
print(re.findall('^h','hello weer 123'))                    #['h']
print(re.findall('3$','hello weer 123'))                    #['3']

•   .
print(re.findall('a.b','a1b'))                         #['a1b']
print(re.findall('a.b','a1b a*b a b aaab'))            #['a1b', 'a*b', 'a b', 'aab']
print(re.findall('a.b','a\nb'))                        #[]
print(re.findall('a.b','a\nb',re.S))                   #['a\nb']
print(re.findall('a.b','a\nb',re.DOTALL))              #['a\nb']同上一条意思一样

•  *
print(re.findall('ab*','bbbbbbb'))                    #[]
print(re.findall('ab*','a'))                          #['a']
print(re.findall('ab*','abbbb'))                      #['abbbb']

• ?
print(re.findall('ab?','a'))                              #['a']
print(re.findall('ab?','abbb'))                           #['ab']

•  .*默认为贪婪匹配
print(re.findall('a.*b','a1b22222222b'))              #['a1b22222222b']
print(re.findall('a.*','a1b22222222b'))               #['a1b22222222b']

•  .*?为非贪婪匹配:推荐使用
print(re.findall('a.*?b','a1b22222222b'))               #['a1b']

•  +
print(re.findall('ab+','a'))                                #[]
print(re.findall('ab+','abbb'))                             #['abbb']

• {m,n}
print(re.findall('ab{2}','abbb'))                            #['abb']
print(re.findall('ab{2,4}','abbb'))                          #['abb']
print(re.findall('ab{1,}','abbb'))                           #'ab{1,}' ==> 'ab+'
print(re.findall('ab{0,}','abbb'))                           #'ab{0,}' ==> 'ab*'

• [ ]
print(re.findall('a[1*-]b','a1b a*b a-b'))       #[]内的都为普通字符  且如果-没有被转意的话,应该放到[]的开头或结尾
print(re.findall('a[^1*-]b','a1b a*b a-b a=b'))  #[]内的^是取反,所以结果为['a=b']
print(re.findall('a[a-zA-Z]b','a1b a*b a-b a=b aeb aEb'))

•  ()   分组
print(re.findall('ab+','ababab123'))                       #['ab', 'ab', 'ab']
print(re.findall('(ab)+123','ababab123'))                  #['ab'],匹配到末尾的ab123中的ab
print(re.findall('(?:ab)+123','ababab123'))                #findall的结果不是匹配的全部内容,而是组内的内容, ?:可以让结果为匹配的全部内容
print(re.findall('href="(.*?)"','<a href="http://www.baidu.com">点击</a>'))                     #['http://www.baidu.com']
print(re.findall('href="(?:.*?)"','<a href="http://www.baidu.com">点击</a>'))# 
 ['href="http://www.baidu.com"']
print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))         #['companies', 'company']

-一些正则匹配表达式

Email地址:  ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
手机号码:   ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
身份证号(15位、18位数字):   ^\d{15}|\d{18}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):  ^[a-zA-Z]\w{5,17}$
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):   ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
xml文件:   ^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
腾讯QQ号:   [1-9][0-9]{4,} (腾讯QQ号从10000开始)
中国邮政编码:  [1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
IP地址.1:    \d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
IP地址.2:    ((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))

来源/更多:正则表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weer-wmq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值