正则表达式
由githubPython一百天,第12天:字符串和正则表达式看到了一个很好的介绍正则表达式的博客,这里推荐给大家,《正则表达式30分钟入门教程》
代码 | 说明 | 实例 | 说明 |
---|---|---|---|
. | 匹配除换行符(\n)以外的任意字符 | monk.y | 匹配monkey、monk$y… |
\b | 匹配边界 | \bmonkey\b | 在"I’m a code monkey"中匹配monkey |
\w | 匹配字母或数字或下划线 | monk\wy | 匹配monkey、monkay… |
\d | 匹配数字 | monk\dy | 匹配monk1y、monk2y… |
^ | 匹配字符串的开头 | ^monkey | 匹配以monkey开头的字符串 |
$ | 匹配字符串的结尾 | monkey$ | 匹配以monkey结尾的字符串 |
* | 重复零次或更多次 | monkey* | 匹配空字符、monkey、monkeymonkey… |
+ | 重复一次或更多次 | monkey+ | 匹配monkey、monkeymonkey… |
? | 重复零次或一次 | monkey? | 匹配空字符、monkey |
{n} | 重复n次 | \d{3} | 匹配123、666… |
{n,} | 至少重复n次 | \d{3} | 匹配123、6666… |
{n1,n2} | 重复n1到n2次(闭区间) | \d{3, 6} | 匹配123、666666… |
反义表:
代码 | 说明 |
---|---|
\B | 匹配非边界 |
\W | 匹配非字母和非数字和非下划线 |
\D | 匹配非数字 |
[^m] | 匹配除了m以外的任意字符 |
[^monkey] | 匹配除了monkey这几个字母以外的任意字符 |
例题1:验证输入用户名和QQ号是否有效并给出对应的提示信息
"""
验证输入用户名和QQ号是否有效并给出对应的提示信息
要求:用户名必须由字母、数字或下划线构成且长度在6~20个字符之间,QQ号是5~12的数字且首位不能为0
"""
import re
def main():
username = input("请输入用户名:")
qq = input("请输入QQ号:")
# 使用正则表达式需要调用re模块
# match函数的第一个参数是正则表达式,第二个参数是需要匹配的字符串
m1 = re.match(r'^[a-zA-Z0-9_]{6,20}$', username)
if not m1:
print("请输入有效的用户名:")
m2 = re.match(r'^[1-9]\d{4,11}$', qq)
if not m2:
print("请输入有效的QQ账号:")
if m1 and m2:
print("你输入的信息是有效的!")
if __name__ == '__main__':
main()
例题2:从一段文字中提取出国内手机号码
import re
def main():
pattern = re.compile(r'(?<=\D)\d{11}(?=\D)')
sentence = '''
重要的事情说8130123456789遍,我的手机号是13512346789这个靓号,
不是15600998765,也是110或119,王大锤的手机号才是15600998765。
'''
mylist = re.findall(pattern, sentence)
print(mylist)
if __name__ == '__main__':
main()
例题3:替换字符串中的不良内容
有脏话,审核未通过…
# 例题4:拆分长字符串
```python
import re
def main():
pattern = re.compile(r'[,。, .]')
poem = '窗前明月光,疑是地上霜。举头望明月,低头思故乡。'
sentence_list = re.split(pattern, poem)
while '' in sentence_list:
sentence_list.remove('')
print(sentence_list) # ['窗前明月光', '疑是地上霜', '举头望明月', '低头思故乡']
if __name__ == '__main__':
main()