正则表达式的学习
Posted 正哥哥的自习室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式的学习相关的知识,希望对你有一定的参考价值。
这是第三天的学习了,希望自己能坚持下去。今天学习了正则表达式。正则表达式是用于匹配尤其是字符匹配的十分有用的工具,用来检测用户名是否达标之类的非常实用。
学习内容
正则表达式
习题练习
匹配
\d
匹配数字\w
匹配数字或字符.
可以匹配任意字符*
表示可以匹配任意数目字符,也包括0个+
表示至少一个字符?
表示0个或1个字符{n}
表示n个字符{n,m}
表示n-m个字符要做更精确地匹配,可以用
[]
表示范围,例如:[a-zA-Z\_][0-9a-zA-Z\_]*
可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量A|B
可以匹配A或B^
表示行的开头,$
表示行的结束我们可以将
' '
内的内容理解成"与"的关系,将[ ]
中的内容理解成"或"的关系
re模块
import re
def is_valid_email(addr):
if re.match(r'^[a-zA-Z0-9.]+@[a-zA-Z0-9]+.[a-zA-Z]{3}',addr):
return True
#Test
assert is_valid_email('someone@gmail.com')
assert is_valid_email('bill.gates@microsoft.com')
assert not is_valid_email('bob#example.com')
assert not is_valid_email('mr-bob@example.com')
print('ok')
#Result
ok
re.match
如果不匹配则返回None
,匹配则返回match
对象
import re
def name_of_email(addr):
res= re.match(r'^<?(\w+\s?\w*)>?\s?\w*@\w+.\w{3}$',addr)
if res:
print(res.group(1))
return res.group(1)
else:
return None
#Test
assert name_of_email('<Tom Paris> tom@voyager.org') == 'Tom Paris'
assert name_of_email('tom@voyager.org') == 'tom'
print('ok')
#Result
ok
()
内可以表示一组,然后再用res.group
打出,注意的是res.group(0)
永远是本身
为什么说第二个问题有一点点难度呢,在我刚看到这道题的时候有点懵,在思考 <>
这样一种结构应该怎么去表达,但其实是没有必要的,只需要把这些东西看成是不同的字符(也确实只是不同的字符)不需要的使用 ?
或者 *
,他们都可以只存在0个,然后每一个字符或者数字一个一个来匹配,这样一来就简单了。
后话
正则表达式是一个极其强大的工具,因此我用这一天的时间是绝对学不精的,关于 re.split()
以及贪婪匹配的内容依旧参考原文链接廖雪峰大佬的文章。
以上是关于正则表达式的学习的主要内容,如果未能解决你的问题,请参考以下文章