特殊字符

所谓特殊字符,就是一些有特殊含义的字符。如果匹配这些特殊字符,必须首先使字符'转义',即,将反斜杠字符\放在他们的前面,下表列出了正则表达式中的特殊字符:

特殊字符

描述

()

标记一个子表达式的开始和结束为止。子表达式可以获取供以后使用。匹配这些字符,请使用\(\)

.

匹配除换行符\n之外的任何单字符。要匹配.需要使用\.

[

标记一个中括号表达式的开始。要匹配[需要使用\[

\

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如:'n'匹配字符'n','\n'匹配换行符,\\匹配\,而\(则匹配(

{

标记限定符表达式的开始。要匹配{需要使用\{

|

指明两项之间的一个选择(或者)。要匹配|需要使用\|

[0-9]

匹配任何数字。等价于\d

()

import re

#():用来表示一个分组
m = re.search(r'h(\d+)x','sh829xkflsa')
print(m.group(1))	#829

#\(.*\):匹配字符串中括号的内容
m1 = re.search(r'\(.*\)','(1+1)*3+5')
print(m1.group())	#(1+1)

.

import re

#. 表示匹配除了换行以外的任意字符
print(re.search(r'.','zhang'))	#z

#如果想要匹配 . 需要使用 \.
print(re.search(r'\.','0123.456'))	#.

[]

import re

#[]:用来表示可选项范围
print(re.search(r'a[0-5]w','pda4wawdmaf'))
#<re.Match object; span=(2, 5), match='a4w'>
print(re.search(r'a[a-z]w','pdacwawdmaf'))
#<re.Match object; span=(2, 5), match='acw'>
#1、[]是用来指定匹配单个字符的范围,可以填写数字例如:0-9,或者字母a-z、A-Z,默认匹配一次

#2、[]的匹配范围包括字符串首尾所在下标
print(re.search(r'[a-d]','123456c'))
#<re.Match object; span=(6, 7), match='c'>

#3、[]内匹配次数增加,可以搭配+使用
print(re.search(r'[0-5]+','as1534ad'))
#<re.Match object; span=(2, 6), match='1534'>

#4.[]中括号内不使用 + 来增加次数,那么中括号内的规则只会匹配单个字符,而不可以匹配多个字符
print(re.search(r'[135]','135'))
#<re.Match object; span=(0, 1), match='1'>

#5、[]内不局限于仅匹配字母或仅匹配数字,可以将两者进行`或`关系处理,进一步增大匹配规则范围
print(re.search(r'[0-5a-dx]+','1345acx'))
#<re.Match object; span=(0, 7), match='1345acx'>
#[0-5a-dx]:匹配范围为0-5数字、a-d字母、字母x

$

import re

#$:用于匹配所检索字符串的最后一个字符,默认检索字符串的最后一个字符为空格
print(re.search(r'$','123456c'))	
#<re.Match object; span=(7, 7), match=''>

#1、$在使用re.M后可以对于检索字符串中的每一行的最后一个字符进行匹配
print(re.findall(r'$','zhang\n zhuo\n wei',re.M))
#['', '', '']

#2、$一般配合其他正则字符进行匹配效果更好
print(re.findall(r'.$','zhang\n zhuo\n wei',re.M))
#['g', 'o', 'i']

|

import re
#|:竖线的作用是'或'的意思,即可以可以匹配竖线分隔的左右字符或字符串
print(re.search(r'f(x|p|t)m','psafxm'))
#<re.Match object; span=(3, 6), match='fxm'>

print(re.search(r'f(x|p|t)m','psafpm'))
#<re.Match object; span=(3, 6), match='fpm'>

print(re.search(r'f(x|prz|t)m','psafprzm'))
#<re.Match object; span=(3, 8), match='fprzm'>

#|和[]的区别在于:中括号表示的范围,而竖线则表示的是可选值