正则表达式

Posted pythoncui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

# 正则表达式:
字符组:[字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中[]表示
[0-9]: 可以匹配0-9这几个数
[a-z]: 可以匹配a-z这26个字母
[A-Za-z1-9]: 匹配字母,数字
元字符:
. 匹配除换行符以外的任意字符
w 匹配字母,数字,下划线(word)
s 匹配任意空白符(space)
d 匹配数字 (digit)
W 匹配非字母,数字,下划线
S 匹配任意非空白符
D 匹配非数字
匹配换行符
^ 匹配字符串的开始 例: ^[a-z] 匹配以字母开头的字符串
$ 匹配字符串的结尾 例: ^[a-z][a-z]$ 匹配以字符串开头,字符串结尾,且中间只有两个字母的字符串
[^a] 除了a之外的都匹配
* 匹配0次或多次 例: d* 匹配所有数字
+ 匹配一次或多次
? 匹配0次或1次
{n} 重复n次 例:d{11} 数字重复11次
{n,} 重复n次或多次
{n,m} 重复n次到m次

练习1:匹配身份证号
^[1-9]d{14}(d{2}[0-9x])?$
^[1-9]d{16}[0-9x] | [1-9]d{14}

import re

# findall 返回所有满足匹配条件的结果, 放在列表里

技术图片
1 ret = re.findall([a-z]+, ava isj ask)
2 print(ret) # [‘ava‘, ‘isj‘, ‘ask‘]
View Code

# search 从前往后找,找到一个就返回,返回的变量需要调用group才能拿到结果。

技术图片
1 ret = re.search(a, bva isj ask)
2 if ret:
3 print(ret.group())   # a
View Code

# match 从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量

技术图片
ret = re.match(a, bva isj ask)
if ret:
print(ret.group())
View Code

# split

技术图片
1 ret = re.split([ab], abcd)
2 print(ret)   # 先用a分割得到: [‘‘,‘bcd‘], 在分别对其按b分割得到[‘‘, ‘‘,‘cd‘]
View Code

# sub 将数字替换成‘H‘,参数2表示只替换两个

技术图片
1 ret = re.sub(d, H, eva13s5, 2)
2 print(ret)    # evaHHs5
View Code

# subn 返回元组(替换的结果,替换了多少次)

技术图片
ret = re.sub(d, H, eva13s5)
print(ret)   # (evaHHsH, 3)
View Code

# compile 将正则表达式编译成一个正则表达对象,

技术图片
1 obj = re.compile(d{3}) // 规则匹配的是3个数字
2 ret = obj.search(abc1234ee)
3 print(ret.group())   # 123
View Code

# finditer 返回一个存放匹配结果的迭代器

技术图片
ret = re.finditer(d, ds3sy4784a)
print(next(ret).group())    #查看第一个结果 3
print([i.group() for i in ret])    # 查看剩余的结果 [‘4‘, ‘7‘, ‘8‘, ‘4‘]
View Code

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式