正则表达式
操作符 | 说明 | 实例 |
---|---|---|
. | 单个字符 | |
[] | 字符集 | [abc]表示a或b或c;[a-z]表示a到z间到一个字符 |
[^] | 非字符集 | [^abc]非a或b或c的单个字符 |
* | 前一个字符0次或无限次扩展 | abc*表示ab,abc,abcc,abccc等 |
+ | 前一个字符1次或无限次扩展 | abc+表示abc,abcc,abccc等 |
? | 前一个字符等0次或1次扩展 | abc?表示ab,abc |
| | 左右表达任意一个 | abc|def表示abc或def |
{m} | 扩展大括号前的一个字符m次 | ab{2}c表示abbc |
{m,n} | 扩展前一个字符的m至n次(包括n) | ab{1,2}c表示abc,abbc |
^ | 匹配字符串开头 | ^abc表示abc在一个字符串开头 |
$ | 匹配字符串结尾 | abc$表示abc在一个字符串结尾 |
() | 分组标记,内部只能用|操作符 | (abc)表示abc,(abc|def)表示abc,def |
\d | 数字,等价于[0-9] | |
\w | 单词字符,等价于[A-Za-z0-9_] | |
\ | 转译符 | a.b 为a.b;a\b为a\b |
re库的基本函数
re.search(pattern, string, flags=0)
#在字符串pattern中搜索,返回match
match = re.match(r'[1-9]\d{5}', 'BIT 100081')
if match: # match非空
print(match.group(0))
返回值为‘100081’
flags参数:
参数名 | 作用 |
---|---|
re.I | 忽略大小写 |
re.M | ^操作符能够给定字符串的每行当作匹配开始 |
re.S | 正则表达式中.操作符能匹配所有字符,默认除换行外的所有字符 |
re.match():
与search功能相似,但从字符串开始位置匹配
如string=‘BIT 100081’将从BIT开始匹配
re.findall():
搜索全部子串,以列表类型返回
re.split(pattern, string, maxsplit=0, flags=0):
匹配字符串,去除匹配到的部分,返回剩余部分
match = re.split(r'[1-9]\d{5}', 'BIT100081 TSU100084', maxsplit=1)
print(match)
返回值:[‘BIT’, ‘TSU100084’] # 仅分割第一个
re.finditer()
参数与search相同
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
for m in re.finditer(r'[1-9]\d{5}', 'BIT100081 TSU100084'):
if m:
print(m.group(0))
返回结果:‘100081’ ‘100084’
re.sub(pattern, repl, string, count=0, flags=0)
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
repl:用于替换的字符串
string:被替换的字符串
count:最大替换次数,0则为全替换
print(re.sub(r'[1-9]\d{5}', ':zipcode', 'BIT100081 TSU100084'))
输出结果:BIT:zipcode TSU:zipcode
r = re.compile()
把字符串编译为正则表达式,实现正则表达式表示,可使用对象方法,可直接调用
re匹配获取的match对象
match对象属性
对象 | 内容 |
---|---|
.string | 待匹配的文本 |
.re | 匹配时的pattern对象(正则表达式) |
.pos | 正则表达式搜索文本的开始位置 |
.enpos | 文本的结束位置 |
对象方法
代码 | 用途 |
---|---|
.group(0) | 获得匹配后的字符串 |
.start() | 匹配字符串在原始字符串的开始位置 |
.end() | 结束位置 |
.span() | 返回(.start, .end()) |