正则表达式对于字符串的处理非常高效
- 简单的使用如下:
-
用
import re
导入正则表达式模块- python所有正则表达式的函数都在
re
模块中
- python所有正则表达式的函数都在
用
re.compile()
创建一个Regex
对象-
用
Regex
对象的search()
方法查找传入的字符串:- 如果字符串中没有找到该正则表达式的匹配,那么
search()
将返回None
- 如果找到了,将返回一个
Match
对象
- 如果字符串中没有找到该正则表达式的匹配,那么
调用
Match
对象的group()
方法返回匹配的字符串
举个电话号码查询的例子
#导入re模块
import re
#创建匹配电话号码的正则表达式对象 `phoneNumRegex `
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d\d\d\d\d')
mo = phoneNumRegex .search('My number is 010-12345678')
if mo is not None:
print('Number is:' + mo.group())
else:
print('Not found!')
- 匹配模式:
符号 | 意义 |
---|---|
\d | 表示一个数字字符,即任何一个0到9的数字 |
\D | 除0到9的数字以外的任何数字 |
\w | 任何字母、数字或下划线字符(‘单词word’) |
\W | 除字母、数字或下划线以外的任何字符 |
\s | 空格、制表符或换行符(‘空白space’) |
\S | 除空格、制表符或换行符以外的任何字符 |
. | 句点(通配符),匹配除了换行符以外的所有字符 |
- 更多匹配方法:
用括号分组 ()
用管道匹配多个分组 |
用问号实现可以选匹配 ?
匹配这个问号之前的分组0次或者1次
用加号实现多次匹配 +
匹配这个问号之前的分组1次或者多次
用星号实现任意次匹配 *
匹配这个问号之前的分组0次或者多次
用花括号实现指定次数匹配 {}
匹配这个问号之前的分组特定次数
花括号默认为贪心匹配,即匹配最长的字符串
非贪心匹配需要在花括号后添加问号,{}?
{n}匹配n次前面的分组。
{n,}匹配n次或更多前面的分组。
{,m}匹配零次到m次前面的分组。
{n,m}匹配至少n次、至多m次前面的分组。
{n,m}?或*?或+?对前面的分组进行非贪心匹配。
Carrots(caret) cost dollars.
插入字符 ^ 匹配开始
^spam表示字符串必须以spam开始
美元字符 表示字符串必须以spam结束
[abc]匹配方括号内的任意字符(诸如a、b或c)。
[^abc]匹配不在方括号内的任意字符。
用Regex
对象的findall()
方法