正则表达式
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‘]
# search 从前往后找,找到一个就返回,返回的变量需要调用group才能拿到结果。
1 ret = re.search(‘a‘, ‘bva isj ask‘)
2 if ret:
3 print(ret.group()) # a
# match 从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量
ret = re.match(‘a‘, ‘bva isj ask‘)
if ret:
print(ret.group())
# split
1 ret = re.split(‘[ab]‘, ‘abcd‘)
2 print(ret) # 先用a分割得到: [‘‘,‘bcd‘], 在分别对其按b分割得到[‘‘, ‘‘,‘cd‘]
# sub 将数字替换成‘H‘,参数2表示只替换两个
1 ret = re.sub(‘d‘, ‘H‘, ‘eva13s5‘, 2)
2 print(ret) # evaHHs5
# subn 返回元组(替换的结果,替换了多少次)
ret = re.sub(‘d‘, ‘H‘, ‘eva13s5‘)
print(ret) # (evaHHsH, 3)
# compile 将正则表达式编译成一个正则表达对象,
1 obj = re.compile(‘d{3}‘) // 规则匹配的是3个数字
2 ret = obj.search(‘abc1234ee‘)
3 print(ret.group()) # 123
# finditer 返回一个存放匹配结果的迭代器
ret = re.finditer(‘d‘, ‘ds3sy4784a‘)
print(next(ret).group()) #查看第一个结果 3
print([i.group() for i in ret]) # 查看剩余的结果 [‘4‘, ‘7‘, ‘8‘, ‘4‘]
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性