一、常用函数
二、正则表达式
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
. | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符 |
* | 匹配0个或多个的表达式 |
+ | 匹配1个或多个的表达式 |
? | 匹配0个或1个由前面的正则表达式定义的片段 |
[^...] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符 |
{n} | 精确匹配 n 个前面表达式。例如 o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o |
{n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段 |
a | b | 匹配a或b |
\w | 匹配字母数字及下划线,等价于'[A-Za-z0-9_]' |
\W | 匹配非字母数字及下划线,等价于 '[^A-Za-z0-9_]' |
\d | 匹配任意数字,等价于 [0-9] |
\D | 匹配任意非数字,等价于 [^0-9] |
[0-9] | 匹配任何数字。类似于 [0123456789] |
[a-z] | 匹配任何小写字母 |
[a-zA-Z0-9] | 匹配任何字母及数字 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er' |
三、简单使用
(1)直接使用函数匹配
import re
str = "联系电话:13011112222或13033336666"
res = re.search(r"1[35789]\d{9}", str)
if res:
print("匹配成功:",res) # 返回匹配到的第一个对象
print(res.group()) # 分组打印该对象
else:
print("匹配失败!")
# 输出
# 匹配成功: <re.Match object; span=(5, 16), match='13011112222'>
# 13011112222
(2)通过pattern对象匹配
import re
str = "I believe, for every drop of rain that falls, a flower grows!"
pattern = re.compile(r'\b[a-zA-Z]+\b')
res = pattern.findall(str)
if res:
print("匹配成功:",res)
# 输出
# 匹配成功: ['I', 'believe', 'for', 'every', 'drop', 'of', 'rain', 'that', 'falls', 'a', 'flower', 'grows']
注:
正则表达式(r'\b[a-zA-Z]+\b')前的 r , raw string(原生字符串)是用来处理转义问题的。
带有 r 表示字符串为非转义的原始字符串,让编译器忽略反斜杠,也就是忽略转义字符。当字符串里没有反斜杠时,这个 r 可有可无。
参考链接: