前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python: Re(正则表达式)库入门

Python: Re(正则表达式)库入门

作者头像
Exploring
发布2022-09-20 13:59:36
4530
发布2022-09-20 13:59:36
举报
文章被收录于专栏:数据处理与编程实践

文章背景:正则表达式是用来简洁表达一组字符串的表达式。正则表达式可以用来判断某字符串的特征归属,主要用于字符串匹配中。本文介绍正则表达式的基本用法。

1 正则表达式的常用操作符

2 经典正则表达式实例

3 Re库的基本使用

3.1 正则表达式的表示类型

3.2 Re库主要功能函数

3.2.1 re.search(pattern, string, flags=0)

3.2.2 re.match(pattern, string, flags=0)

3.2.3 re.findall(pattern, string, flags=0)

3.2.4 re.split(pattern, string, maxsplit=0, flags=0)

3.2.5 re.finditer(pattern, string, flags=0)

3.2.6 re.sub(pattern, repl, string, count=0, flags=0)

3.3 Re库的另一种等价用法

3.4 Re库的match对象

3.5 Re库的贪婪匹配与最小匹配

1 正则表达式的常用操作符
2 经典正则表达式实例
3 Re库的基本使用
3.1 正则表达式的表示类型

(1)原生字符串类型

Re库采用raw string类型表示正则表达式,表示为:r'text'

例如:r'[1-9]\d{5}'r'\d{3}-\d{8}|\d{4}-\d{7}'

raw string是指不包含对转义符再次转义的字符串。

(2)string类型

Re库也可以采用string类型表示正则表达式,但更繁琐。

例如:'[1-9]\\d{5}''\\d{3}-\\d{8}|\\d{4}-\\d{7}'

建议:当正则表达式包含转义符时,使用raw string。

3.2 Re库主要功能函数
3.2.1 re.search(pattern, string, flags=0)

在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象。

  • pattern: 正则表达式的字符串或原生字符串表示;
  • string: 待匹配字符串;
  • flags: 正则表达式使用时的控制标记。
代码语言:javascript
复制
import rematch = re.search(r'[1-9]\d{5}','BIT 100081')
if match:
    print(match.group(0))
代码语言:javascript
复制
100081
3.2.2 re.match(pattern, string, flags=0)

从一个字符串的开始位置起匹配正则表达式,返回match对象。

代码语言:javascript
复制
import re
match = re.match(r'[1-9]\d{5}','BIT 100081')
if match:
    print(match.group(0))
type(match)
代码语言:javascript
复制
NoneType
代码语言:javascript
复制
import re
match = re.match(r'[1-9]\d{5}','100081 BIT')
if match:
    print(match.group(0))
代码语言:javascript
复制
100081
3.2.3 re.findall(pattern, string, flags=0)

搜索字符串,以列表类型返回全部能匹配的子串。

代码语言:javascript
复制
import re
ls = re.findall(r'[1-9]\d{5}','BIT100081 TSU100084')
ls
代码语言:javascript
复制
['100081', '100084']
3.2.4 re.split(pattern, string, maxsplit=0, flags=0)

将一个字符串按照正则表达式匹配结果进行分割,返回列表类型。

  • maxsplit: 最大分割数,剩余部分作为最后一个元素输出。
代码语言:javascript
复制
import re
re.split(r'[1-9]\d{5}','BIT100081 TSU100084')
代码语言:javascript
复制
['BIT', ' TSU', '']
代码语言:javascript
复制
import re
re.split(r'[1-9]\d{5}', 'BIT100081 TSU100084', maxsplit=1)
代码语言:javascript
复制
['BIT', ' TSU100084']
3.2.5 re.finditer(pattern, string, flags=0)

搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象。

代码语言:javascript
复制
import re
for m in re.finditer(r'[1-9]\d{5}', 'BIT100081 TSU100084'):
    if m:
        print(m.group(0))
代码语言:javascript
复制
100081
100084
3.2.6 re.sub(pattern, repl, string, count=0, flags=0)

在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串。

  • repl: 替换匹配字符串的字符串;
  • count: 匹配的最大替换次数。
代码语言:javascript
复制
import re
re.sub(r'[1-9]\d{5}', ':zipcode', 'BIT100081 TSU100084')
代码语言:javascript
复制
'BIT:zipcode TSU:zipcode'
3.3 Re库的另一种等价用法

(1)函数式用法:一次性操作

代码语言:javascript
复制
rst = re.search(r'[1-9]\d{5}','BIT 100081')

(2)面向对象用法:编译后的多次操作

代码语言:javascript
复制
pat = re.compile(r'[1-9]\d{5}')
rst = pat.search('BIT 100081')

regex = re.compile(pattern, flags=0) 将正则表达式的字符串形式编译成正则表达式对象。

代码语言:javascript
复制
regex = re.compile(r'[1-9]\d{5}')
3.4 Re库的match对象

Match对象是一次匹配的结果,包含匹配的很多信息。

代码语言:javascript
复制
import re
match = re.search(r'[1-9]\d{5}','BIT 100081')
if match:
    print(match.group(0))
print(type(match))
代码语言:javascript
复制
100081
<class 're.Match'>

Match对象的属性:

Match对象的方法:

代码语言:javascript
复制
import re
m = re.search(r'[1-9]\d{5}','BIT100081 TSU100084')
print("String:",m.string)
print("Pattern:",m.re)
print("Pos_ini:",m.pos)
print("Pos_end:",m.endpos)

print("Acq_string:",m.group(0))
print("Acq_ini:",m.start())
print("Acq_end:",m.end())
print("Acq_span:",m.span())
代码语言:javascript
复制
String: BIT100081 TSU100084
Pattern: re.compile('[1-9]\\d{5}')
Pos_ini: 0
Pos_end: 19
Acq_string: 100081
Acq_ini: 3
Acq_end: 9
Acq_span: (3, 9)
3.5 Re库的贪婪匹配与最小匹配
代码语言:javascript
复制
import re
m = re.search(r'PY.*N','PYANBN')
if m:
    print(m.group(0))
代码语言:javascript
复制
PYANBN

Re库默认采用贪婪匹配,即输出匹配最长的子串。

代码语言:javascript
复制
import re
m = re.search(r'PY.*?N','PYANBN')
if m:
    print(m.group(0))
代码语言:javascript
复制
PYAN

最小匹配字符串:

只要长度输出可能不同的,都可以通过在操作符后面增加变成最小匹配。

参考资料:

[1] 中国大学MOOC: Python网络爬虫与信息提取(https://www.icourse163.org/course/BIT-1001870001

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与编程实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 正则表达式的常用操作符
  • 2 经典正则表达式实例
  • 3 Re库的基本使用
    • 3.1 正则表达式的表示类型
      • 3.2 Re库主要功能函数
        • 3.2.1 re.search(pattern, string, flags=0)
        • 3.2.2 re.match(pattern, string, flags=0)
        • 3.2.3 re.findall(pattern, string, flags=0)
        • 3.2.4 re.split(pattern, string, maxsplit=0, flags=0)
        • 3.2.5 re.finditer(pattern, string, flags=0)
        • 3.2.6 re.sub(pattern, repl, string, count=0, flags=0)
      • 3.3 Re库的另一种等价用法
        • 3.4 Re库的match对象
          • 3.5 Re库的贪婪匹配与最小匹配
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档