Python中的正则表达式要用到re模块,下面先介绍一下正则表达式需要用到的特殊字符和说明
语法 | 说明 |
\d | 匹配一个数字字符 |
\D | 匹配一个非数字字符 |
\s | 匹配任何不可见字符(空格、制表符、换行符等) |
\S | 匹配任何可见字符 |
\w | 匹配任何单词字符 |
\W | 匹配任何非单词字符 |
. | 匹配所有字符 |
^ | 从字符串开头开始匹配,比如^\d表示以一个数字字符开头 |
$ | 从字符串末尾开始匹配,比如\d$表示以一个数字字符结尾 |
* | 匹配前一个字符任意次 |
+ | 匹配前一个字符一次或多次 |
? | 匹配前一个字符零次或一次 |
{m} | 匹配前一个字符m次 |
{m,n} | 匹配前一个字符最少m次最多n次 |
\ | 转义字符 |
[] | 比如[a-z]表示匹配从a到z之间的所有字符串 |
| | 或,比如A|B表示匹配A或B |
() | 精确匹配括号中指定的模式 |
函数 | 说明 |
---|---|
search | 从字符串中进行搜索,成功则返回匹配目标,失败则返回None |
match | 从字符串开头进行匹配,成功则返回匹配目标,失败则返回None |
fullmatch | 匹配整个字符串 |
split | 根据模式分割字符串 |
findall | 查找字符串中所有非重叠匹配 |
finditer | 类似于findall,但返回Python迭代器 |
sub | 用提供的字符串替代匹配模式 |
以下为部分示例:对于split函数,我们在对字符串进行分割的时候可以直接调用split方法,再次不再进行
>>> import re#导入包
>>> a='xiaoming:wo jiao xiaoming,wo de dianhua shi +86-666666'
>>> print(re.search(pattern='\d+\W\d+',string=a))
<re.Match object; span=(45, 54), match='86-666666'>#此处输出的时一个match对象
>>> mp=re.search(pattern='\d+\W\d+',string=a)#查找电话号码
>>> print(mp.group())#使用group方法获取于指定模式相匹配的字符串
86-666666
>>> print(mp.start())#获取第一个匹配字符串的索引
45
>>> print(mp.end())#获取匹配字符串的
54
>>> print(mp.span())#获取索引范围
(45, 54)
>>> print(re.findall(pattern='\w+',string=a))
['xiaoming', 'wo', 'jiao', 'xiaoming', 'wo', 'de', 'dianhua', 'shi', '86', '666666']
>>> m_sub=re.sub(pattern='\w+:',string=a,repl='xiaohong:')#模式替代,使用repl传入的字符串替代匹配到的第一个字符串
>>> print(m_sub)
xiaohong:wo jiao xiaoming,wo de dianhua shi +86-6666
#编译模式
>>> p=re.compile('\d{6}')#预先设定好匹配的模式
>>> m1=p.search(a)#对预先设定好的模式调用查找
>>> print(m1.group())获取查找到的字符串
666666