正则表达式(Regular Expression常简写为regex 或者 RE)并不是Python所特有的而是属于整个计算机科学的一个概念,其主要是用来识别、分割、检索、替换某种具有特定格式的文本而产生的。目前正则表达式在众多计算机语言(Python,Java,C++等)中有着广泛的应用,另外写爬虫程序而言正则表达式也是必不可少的。
正则表达式的使用方法:
- 使用match方法进行匹配:
match()方法用于从字符串的开始出进行匹配,如果在其实位置匹配成功,则返回一个match对象,否则返回None。语法格式如下
re.match(pattern,string,[flags])
参数说明如下:
pattern: 表示模版,即进行字符串匹配的格式,由正则表达式转化而来。
string: 表示要匹配的字符串。
flags: 可选参数,用于限定匹配方式,如是否要区分大小写
- 使用search方法进行匹配:
search方法用于在整个字符串中搜索第一个匹配值,如果在其实位置匹配成功则返回Match()对象,否则None。语法格式如下
re.search(pattern,string,[flags])
参数作用同上
- 使用findall()方法进行匹配:
findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并且以列表的形式返回。如果匹配成功则返回包含匹配结构的列表,否则返回空列表,其语法格式如下:
re.findall(pattern,string,[flags])
- 使用sub()方法替换字符串:
re.sub(pattern,repl,string,count,[flags])
其参数说明如下:
pattern:替换模板,由模式字符串转换而来
repl: 表示将原始字符串替换成的字符串
string: 表示原始字符串
count: 表示匹配后替换的最大次数,默认值为零
- 使用split()方法分割字符串
re.split(pattern,string,[maxsplit],[flags])
maxsplit即最大拆分次数
以上方法中flags参数的使用:
标志 | 说明 |
---|---|
A或ASCII | 只进行ASCCII匹配 |
I | 不区分大小写匹配 |
M | 将行定位符用于整个字符串的每一行 |
X | 忽略掉模式字符串中未转义的空格和注释 |
S | 使用‘’.‘’字符匹配所有字符,包括换行符 |
正则表达式的语法规则:
各种元字符的作用如下:
字符 | 说明 |
---|---|
. | 匹配换行符以外的任意字符 |
\w | 匹配字母数字下划线或汉字 |
\s | 匹配任意空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 行定位符匹配字符串开始 |
$ | 行定位符匹配字符串结尾 |
各种匹配限定符如下:
限定符 | 说明 | 例子 |
---|---|---|
? | 匹配前面的字符一次或零次 | 如lov?e可以匹配love或者loe |
+ | 匹配前面的字符一次或多次 | |
* | 匹配前面的字符零次或多次 | |
{n} | 匹配前面的字符n次 | 如teac{1}her只能匹配teacher |
{n,} | 匹配前面的字符至少n次 | |
{n,m} | 匹配前面的字符至少n次至多m次 |
使用元字符和限定符进行匹配是很简单的事情但是如果要像不使用元字符和限定符进行匹配也是可以的只需要在[]里面加上要匹配的字符就可以了,但是还是有语法规则如下:
匹配任意一位数字:[0-9]
匹配任意一个字母:[a-zA-Z]
匹配任意的字母数字下划线:[a-z0-9A-Z_]等同于\w
排除字符: [^a-zA-Z] 加上括号之后就是排除字母
选择字符:all the counts 身份证号码的长度为15位或者是十八位,如果要匹配其可用如下表达式
(^\d{15}$)|(^\d{18}$)|(^\d{17}$)|(^\d|x|X$)
转义字符:正则表达式中的转义字符\的用法在各种语言中都大同小异都是把特殊字符变成普通字符,
比如匹配一个IP地址 127.0.0.1
如果用表达式[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1.3}着显然不对因为.是转义字符有特殊含义
必须在其前面加上转义字符才可以[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} \.[0-9]{1.3},
分组:(four|thir)th这个就不仅仅是匹配括号中的four和thir这么简单,这个表达式的意思是匹配fourth,
或者thirth
重复操作:([0-9]){3},这是对小括号内的表达式进行重复操作3次
Python中正则表达式的语法:
在python中是将正则表达式当作模式字符串来使用的如下:
‘[a-zA-Z]’
而且字符串必须是写成原生字符串的形式
‘\b\w\b’
上面的写法是错误的正确的如下
‘\\b\\w\\b’
如果在表达式中还有很多的反斜杠和特殊字符则建议采用如下:
r’\bm\w*\b‘
意思是把模式字符串变成原生字符串,建议都加r处理
网友评论