1. 正则表达式的定义
- 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
10000 ~ 12数字组合
09876536
- 长度
- 是否是0开头
-
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
-
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。
-
Regular Expression的“Regular”一般被译为“正则”、“正规”、“常规”。此处的“Regular”即是“规则”、“规律”的意思,Regular Expression即“描述某种规则的表达式”之意。
正则在所有语言中都有的内容。
2. 正则表达式的作用和特点
- 给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
- 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
- 可以通过正则表达式,从字符串中获取我们想要的特定部分。
- 正则表达式的特点是:
- 灵活性、逻辑性和功能性非常强;
- 可以迅速地用极简单的方式达到字符串的复杂控制。
- 对于刚接触的人来说,比较晦涩难懂。
场景:
如何判断一个字符串是手机号呢?
判断邮箱为163或者126的所有邮件地址
假如你在写一个爬虫,你得到了一个网页的HTML源码。其中有一段
<html><body><h1>hello world<h1></body></html>
你想要把这个hello world提取出来,但你这时如果只会python 的字符串处理,那么第一反应可能是
s = "<html><body><h1>hello world</h1></body></html>"
start_index = s.find('<h1>')
python re模块:
表达 | 功能 |
---|---|
\A: | 表示从字符串的开始处匹配 |
\Z: | 表示从字符串的结束处匹配,如果存在换行,只匹配到换行前的结束字符串。 |
\b: | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘py\b’ 可以匹配"python" 中的 ‘py’,但不能匹配 “openpyxl” 中的 ‘py’。 |
\B: | 匹配非单词边界。 ‘py\b’ 可以匹配"openpyxl" 中的 ‘py’,但不能匹配"python" 中的 ‘py’。 |
\d: | 匹配任意数字,等价于 [0-9]。 digit |
\D: | 匹配任意非数字字符,等价于 [^\d]。not digit |
\s: | 匹配任意空白字符,等价于 [\t\n\r\f]。 space |
\S: | 匹配任意非空白字符,等价于 [^\s]。 |
\w: | 匹配任意字母数字及下划线,等价于[a-zA-Z0-9_]。 |
\W: | 匹配任意非字母数字及下划线,等价于[^\w] |
\: | 匹配原义的反斜杠\。 |
‘.’ | 用于匹配除换行符(\n)之外的所有字符。 |
‘^’ | 用于匹配字符串的开始,即行首。 |
‘$’ | 用于匹配字符串的末尾(末尾如果有换行符\n,就匹配\n前面的那个字符),即行尾。 |
定义正则验证次数:
表达 | 功能 |
---|---|
‘*’ | 用于将前面的模式匹配0次或多次(贪婪模式,即尽可能多的匹配) >=0 |
‘+’ | 用于将前面的模式匹配1次或多次(贪婪模式) >=1 |
‘?’ | 用于将前面的模式匹配0次或1次(贪婪模式) 0 ,1 |
‘{m}’ | 用于验证将前面的模式匹配m次 |
‘{m,}’ | 用于验证将前面的模式匹配m次或者多次 >=m |
‘{m,n}’ | 用于验证将前面的模式匹配大于等于m次并且小于等于n次 |
‘*?,+?,??’ | 即上面三种特殊字符的非贪婪模式(尽可能少的匹配)。 |
‘{m,n}’ | 用于将前面的模式匹配m次到n次(贪婪模式),即最小匹配m次,最大匹配n次。 |
‘{m,n}? | ’即上面‘{m,n}’的非贪婪版本。 |
其他
表达 | 功能 |
---|---|
‘\’: | ''是转义字符,在特殊字符前面加上\,特殊字符就失去了其所代表的含义,比如+就仅仅代表加号+本身。 |
‘[]’ | 用于标示一组字符,如果^是第一个字符,则标示的是一个补集。比如[0-9]表示所有的数字,[^0-9]表示除了数字外的字符。 |
‘|’ | 比如A|B,用于匹配A或B。 |
‘(…)’ | 用于匹配括号中的模式,可以在字符串中检索或匹配我们所需要的内容。 |
贪婪
-
Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;
-
非贪婪则相反,总是尝试匹配尽可能少的字符。
-
在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。