写作时间:2018/12/17
作者:永远的码农(博客园)
一.正则表达式简介:
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
二.python正则表达式中的特殊字符以及转义字符的用法
特殊字符 | 描述 |
^ | 表示匹配的字符必须在最前面 |
$ | 与^类似,匹配最末的字符 |
* | 匹配*前面的字符0次或n次 |
+ | 匹配+前面的字符1次或n次 |
? | 匹配?前面的字符0次或1次 |
. | 匹配除了\n外的所有字符 |
(x) | 匹配x并且记录匹配的值 |
x|y | 匹配x或者y |
{n} | n是正整数,匹配前面的n个字符 |
{n,} | 匹配前面至少n个字符 |
{n,m} | 匹配前面至少n个至多m个字符 |
[xyz] | 匹配列表中列出的任一字符,可以用连字符 - 指出字符范围 |
[b] | 匹配一个空格 |
b | 匹配一个单词的分界线,比如一个空格 |
B | 匹配一个单词的非分界线 |
转义字符 | 描述 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字 |
\s | 匹配空白,比如空格,tab |
\S | 匹配非空白 |
\w | 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字 |
\W | 匹配特殊字符,即非字母、非数字、非汉字、非_ |
初级正则表达式常见使用:
1.匹配有效的正整数
正则表达式: [1-9]+[0-9]*
典例: 找出一个文本文件中所有有效的正整数(00123这样的视为无效,12300视为有效)
先创建一个文本文件new.txt,内容如下:
aaddccbbee 0012300 45600 78909 abcd1234efgh 12340 ghijkl 12 34 056 780 0099 12340056aabbcc00
1 import re 2 file = open("new.txt") 3 for line in file: 4 list = re.findall("[1-9]+[0-9]*",line) 5 print("findall()返回列表为:",list) 6 for num in list: 7 print(num)
执行结果: findall()返回列表为: [‘12300‘, ‘45600‘, ‘78909‘] 12300 45600 78909 findall()返回列表为: [‘1234‘, ‘12340‘] 1234 12340 findall()返回列表为: [‘12‘, ‘34‘, ‘56‘, ‘780‘, ‘99‘] 12 34 56 780 99 findall()返回列表为: [‘12340056‘] 12340056
2.匹配有效的负整数
正则表达式: -[1-9]+[0-9]*
3.匹配有效的整数
正则表达式: -?[1-9]+[0-9]*|0
4.匹配浮点数
正则表达式: -?[0-9]+\.[0-9]+
典例: 找出文本文件new.txt中的所有浮点数
文本文件内容如下:
aaddccbbee 456 078 -7780 9.99654 abcd1234efgh -12340 ghijkl 33.0 12 -34 056 780 0099 -2 0 2.23 -3.8 12340056aabbcc0.123
1 import re 2 file = open("new.txt") 3 for line in file: 4 list = re.findall("-?[0-9]+\.[0-9]+",line) 5 print("findall()返回列表为:",list) 6 for num in list: 7 print(num)
执行结果: findall()返回列表为: [‘9.99654‘] 9.99654 findall()返回列表为: [‘33.0‘] 33.0 findall()返回列表为: [‘2.23‘, ‘-3.8‘] 2.23 -3.8 findall()返回列表为: [‘0.123‘] 0.123
5.匹配由数字、26个英文字母组成的字符串
正则表达式: [0-9a-zA-Z]+
高级正则表达式常见使用:
1.输入用户名只能是汉字,且字数位于3~10之间
正则表达式: ^[\u4e00-\u9fa5]{3,10}$
典例:验证用户输入名是否满足如上要求
1 import re 2 input = input("请输入用户名:") 3 if re.match("^[\u4e00-\u9fa5]{0,}$",input): 4 print("用户名有效") 5 else: 6 print("用户名无效")
测试效果:请输入用户名:王老二 用户名有效 请输入用户名:张三 用户名无效 请输入用户名:lyj来了喔 用户名无效
2.输入密码开头必须是英文字母,其他部分只能是数字,下划线_或字母,且长度为6~12位
正则表达式: [a-zA-Z]{1}[a-zA-Z0-9_]{5,11}
3.电子邮箱验证
正则表达式: ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
正则表达式并不是唯一的,不同的正则表达式可以达到相同的匹配要求......
本人也是初学python,这篇随笔其中有的地方肯定有不好的地方,如果你有什么建议或发现什么错误,欢迎在下面评论区提出,如果你觉得鄙人写得还不错,请各位客官动动小手点个推荐??吧!
原文地址:https://www.cnblogs.com/lyj-blogs/p/10133688.html