一、应用场景
实际工作中我们在处理字符串的时候会经常用到模式匹配,比如从一个字符串中找出电话号码、数值等等,还有像网页表单输入值判断,判断用户输入的电话号码、身份证号码、QQ号码等是否合法,如果要通过场景罗列的方法,这样实现的效果不好,而且工作量大且可能遗漏很多意外情况,这个时候我们想到模式,也就是能不能把这类现象或问题用同一个模式描述,而正则表达式就是解决这类问题的,归纳起来就一句话:能通过模式描述清楚的问题。
二、Python正则表达式
Python语言中有正则表达式模块re,正则表达式功能计划通过re模块来实现。
- 正则表达式规则
正则表达式 | 表达式含义 | 备注 |
---|---|---|
^ | 匹配字符串的开始 | |
$ | 匹配字符串的结尾 | |
. | 匹配除换行符外带的任意字符,一个点只能匹配一个 | |
[ ] | 表示字符串列举的意思 | |
() | 表示分组,就是括号里面的作为一个整体 | |
\b | 匹配一个单词的边界 | |
\s | 表示空白字符( space) | 和[ \t\n\r]等价(分别是空格制表符换行符回车符) |
\S | 匹配任意不是空白符的字符,和[ \t\n\r]等价 | 也就是^\s |
\d | 匹配任意数字 | |
\D | 匹配任意非数字字符 | |
\w | 匹配字母数字下划线或者汉字 | |
\W | 匹配任意不是字母,数字,下划线,汉字的字符 | |
x? | 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符) | |
x* | 匹配0次或者多次 x 字符 | |
x+ | 匹配1次或者多次 x 字符 | |
x{n,m} | 匹配 x 字符,至少 n 次,至多 m 次 | |
(a | b | c) |
[0-9] | 表示数字 | 等价于\d |
[a-z] | 表示小写字母 | |
[A-Z] | 表示大写字母 | |
[a-zA-Z0-9] | 匹配任何字母及数字 |
- 实例
名称 | 具体场景 | 正则表达式 | 备注 |
---|---|---|---|
固定电话 | 0区号加八位数字 | ^0\\d{2}\-?\\d{8} | |
身份证号码 | 15或18位 | ( [1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|([1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$) | |
车牌号 | 车牌号 | ^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$ | |
中文 | 中文字符 | [\u4E00-\u9FA5]+ |
三、Python正则表达式函数
函数名 | 描述 | 备注 |
---|---|---|
re.compile | 编译正则表达式,生成一个正则表达式对象 | 供 match() 和 search() 这两个函数使用 |
re.match | 尝试从字符串的起始位置匹配一个模式 | 如果不是起始位置匹配成功的话,match()就返回none |
re.search | 扫描整个字符串并返回第一个成功的匹配 | |
re.findall | 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表 | |
re.sub | 替换字符串中的匹配项 |
【参考文献】
1.Python 正则表达式
2.正则表达式的学习与应用场景
3.python正则表达式及使用正则表达式的例子