阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!!
1、笔记:
-
1、什么是正则表达式?
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的
-
2、基础语法?
读此篇,此篇也是参考文献:开头就是基础语法、进阶语法及例子
语法中需要注意类似于【’>‘、‘-’】等,有时必须加’\‘,有时不用。吃不准就都加‘\’。
-
3、你可能注意到了,‘py’也可以匹配’python’,但是加上^py$就变成了整行匹配,就只能匹配’py’了,why?
import re print(re.match('py', 'python')) #Output : <re.Match object; span=(0, 2), match='py'> 说明匹配成功 print(re.match('^py$', 'python')) #Output : None 说明匹配失败
‘py’ 之所以能 匹配 ‘python’ ,其实这里只匹配了一部分,我们可以用group进行一个分组的提取,如下:
m = re.match('(py)', 'python') print(m.groups()) #Output : ('py',) 证明只匹配了前面一小部分
‘^py$’ 之所以不 匹配 ‘python’ ,是因为代表了从p开始y结束,故不匹配
-
4、关于匹配的问题:
如果去判断一个邮件地址合不合法,一定要判断全,不能类似【‘py’ 匹配 ‘python’】,即便返回能匹配,但其实没有真正的判断。
-
5、关于goups分组提取的问题:
【group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串。】 错
【group(0)永远是正则匹配的字符串,group(1)、group(2)……表示第1、2、……个子串。】 对>>> import re
>>> pattern = re.compile(r’(\d+)\w*?(\d+).‘) # 匹配:数字+字母+数字+任意字符
>>> pattern.match(‘132in234dhu’).groups()
(‘132’, ‘234’)
>>> pattern.match(‘132in234dhu’).group(0)
‘132in234dhu’
>>> pattern.match(‘132in234dhu’).group(1)
‘132’
>>> pattern = re.compile(r’(\d+)\w?(\d+)') # 匹配:数字+字母+数字 (剩余内容不匹配)
>>> pattern.match(‘132in234dhu’).groups()
(‘132’, ‘234’)
>>> pattern.match(‘132in234dhu’).group(0)
‘132in234’ # 注意这里!group(0)返回的不是原始字符串,而是与正则表达式匹配的字符串!!!
>>> pattern.match(‘132in234dhu’).group(1)
‘132’
-
6、**关于group分组提取字符串时,不一定需要全部匹配,可以只匹配需要提取的那部分,**例如:
版本二可以提取出带名字的Email地址:
tom@voyager. org => Tom Paris
bob@example. com => bob代码如下:
def name_of_email(addr): re_addr = re.compile(r'<?([A-Za-z\s]+)>?') #提前编译,匹配时只用匹配需要的前面那部分即可 name = re_addr.match(addr).group(1) return name def main: # 测试: assert name_of_email('<Tom Paris> tom@voyager.org') == 'Tom Paris' assert name_of_email('tom@voyager.org') == 'tom' print('ok') if __name__ == '__main__': main() #Output : ok
码字不易,谢谢点赞!!!
码字不易,谢谢点赞!!!
码字不易,谢谢点赞!!!