在Python中要使用正则首先要导入模块
#pattern:是你构建的正则表达式对象,可以是个字符串
在re中有几个方法:
1.match 从头开始匹配,只匹配一次,3.匹配到结果后立即返回,并且可以使用group方法获取匹配结果,如果没有匹配到结果返回None
2.search:从头开始匹配,单次匹配,会在整个字符串中找目标,一旦匹配到立即返回,如果整个字符串中都没有,返回None
3.findall:会根据你写的正则表达式,在字符串中匹配结果,会返回所有查找到的结果,返回的结果是一个列表。
4.sub:先根据正则表达式查找到要匹配的字符串,然后使用一个新的字符串,去替换查找到的字符串。
5.split:会根据你正则表达式里面的符号做字符串的分割,返回的是一个列表
6.finditer:跟findall很像,不过返回的结果是一个可迭代对象。
匹配单个字符
.匹配任意1个字符(除了\n)
[ ]匹配[ ]中列举的字符
\d匹配数字,即0-9
\D匹配非数字,即不是数字
\s匹配空白,即 空格,tab键
\S匹配非空白
\w匹配单词字符,即a-z、A-Z、0-9、_
\W匹配非单词字符
匹配多个字符
*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有1次
?匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}匹配前一个字符出现m次
{m,n}匹配前一个字符出现从m到n次
匹配开头结尾
^ \A 匹配字符串开头
$ \Z 匹配字符串结尾
分组匹配方式
|匹配左右任意一个表达式
(ab)将括号中字符作为一个分组
\num引用分组num匹配到的字符串
(?P)分组起别名
(?P=name)引用别名为name分组匹配到的
贪婪和非贪婪
Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符;
非贪婪则相反,总是尝试匹配尽可能少的字符。
在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
complie函数
import re 将正则表达式编译成 Pattern 对象 pattern = re.compile(r'\d+')
修饰符号 描述 re.I 使用匹配对大小写不敏感(不区分大小写) re.S 使.匹配包括换行符在内的所有字符 re.M 多行匹配 re.L 做本地化识别
match 方法:从起始位置开始查找,一次匹配
search 方法:从任何位置开始查找,一次匹配
findall 方法:全部匹配,返回列表
finditer 方法:全部匹配,返回迭代器
split 方法:分割字符串,返回列表
sub 方法:替换
mysql正则查询
可以用select语句来查询,使用Like 和 regexp 关键字
LIKE匹配整个列。
而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。
.匹配任意1个字符(除了\n)
[ ]匹配[ ]中列举的字符
\d匹配数字,即0-9
\D匹配非数字,即不是数字
\s匹配空白,即 空格,tab键
\S匹配非空白\w匹配单词字符,即a-z、A-Z、0-9、_
\W匹配非单词字符
*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有1次
?匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}匹配前一个字符出现m次
{m,n}匹配前一个字符出现从m到n次
^匹配字符串开头$匹配字符串结尾
|匹配左右任意一个表达式
(ab)将括号中字符作为一个分组
\num引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
网友评论