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

Python 正则表达式

原创
作者头像
ruochen
修改2021-05-11 10:02:57
2490
修改2021-05-11 10:02:57
举报

正则表达式(RegularExpression, re)

  • 是一个计算机科学的概念
  • 用于使用单个字符串来描述,匹配符合某个规则的字符串
  • 常常用来检索,替换某些模式的文本

正则的写法

  • .(点号): 表示任意一个字符,除了\n,比如查找所有的一个字符 .
  • []: 匹配中括号中列举的任意字符,比如L,Y,0, LLY, Y0, LIU
  • \d: 任意一个数字
  • \D: 除了数字都可以
  • \s: 表示空格,tab键
  • \S: 除了空白符号
  • \w: 单词字符,就是a-z, A-Z, 0-9, _
  • \W: 除了“\w”表示的都可以
  • : 表示前面内容重复零次或者多次, \w
  • +: 表示前面内容至少出现一次
  • ?: 前面才出现的内容零次或者一次
  • {m,n}: 允许前面内容出现最少m次,最多n次
  • ^: 匹配字符串的开始
  • $: 匹配字符串的结尾
  • \b: 匹配单词的边界
  • (): 对正则表达式内容进行分组,从第一个括号开始,编号逐渐增大
代码语言:txt
复制
    验证一个数字: ^\d$
代码语言:txt
复制
    必须有一个数字,最少一位: ^\d+$
代码语言:txt
复制
    只能出现数字,且位数为5-10位: ^\d{5,10}$
代码语言:txt
复制
    注册者输入年龄,要求16岁以上,99岁以下:  ^[16,99]$
代码语言:txt
复制
    只能输入英文字符和数字: ^[A-Za-z0-9]$
代码语言:txt
复制
    验证qq号码: [0-9]{5,12}
  • \A: 只匹配字符串开头,\Aabcd, 则abcd
  • \Z: 只匹配字符串末尾,abcd\Z, abcd
  • |: 左右任意一个
  • (?P<name>...): 分组,除了原来的编号再制定一个别名,(?P<id>12345){2}, 1234512345
  • (?P=name): 引用分组RE使用大致步骤
  • 使用compile将表示正则的字符串编译为一个pattern对象
  • 通过pattern对象提供一系列方法度文本进行查找匹配,获得匹配结果,一个Match对象
  • 最后使用Match对象提供的属性和方法获得信息,根据需要进行操作

RE常用函数

  • group(): 获得一个或者多个分组匹配的字符串,当要获得整个匹配的子串时,直接使用group或者group(0)
  • start: 获取分组匹配的子串在整个字符串中的起始位置,参数默认0
  • end: 获取分组匹配的子串在整个字符串中的结束位置,默认为0
  • span: 返回的结构技术(start(group), end(group))
代码语言:txt
复制
# 导入相关包
import re

# 查找数字
# r表示字符串不转义
p = re.compile(r'\d+')
# 在字符串“one12twothree33456four78”中进行查找,按照规则p制定的正则进行查找
# 返回结果是None表示没有找到,否则会返回match对象
m = p.match("one12twothree33456four78")

print(m)
代码语言:txt
复制
None
代码语言:txt
复制
# 导入相关包
import re

# 查找数字
# r表示字符串不转义
p = re.compile(r'\d+')
# 在字符串“one12twothree33456four78”中进行查找,按照规则p制定的正则进行查找
# 返回结果是None表示没有找到,否则会返回match对象
# 参数3,6表示在字符串中查找的范围
m = p.match("one12twothree33456four78", 3, 26)

print(m)

# 上述代码说明的问题
# 1. match可以输入参数表示起始位置
# 2. 查找到的结果只包含一个,表示第一次进行匹配成功的内容
代码语言:txt
复制
<_sre.SRE_Match object; span=(3, 5), match='12'>
代码语言:txt
复制
print(m[0])
print(m.start(0))
print(m.end(0))
代码语言:txt
复制
12
代码语言:txt
复制
3
代码语言:txt
复制
5
代码语言:txt
复制
import re
# I 表示忽略掉大小写
p = re.compile(r'([a-z]+) ([a-z]+)', re.I)

m = p.match("I am really love you")
print(m)
代码语言:txt
复制
<_sre.SRE_Match object; span=(0, 4), match='I am'>
代码语言:txt
复制
print(m.group(0))
print(m.start(0))
print(m.end(0))
代码语言:txt
复制
I am
代码语言:txt
复制
0
代码语言:txt
复制
4
代码语言:txt
复制
print(m.group(1))
print(m.start(1))
print(m.end(1))
代码语言:txt
复制
I
代码语言:txt
复制
0
代码语言:txt
复制
1
代码语言:txt
复制
print(m.group(2))
print(m.start(2))
print(m.end(2))
代码语言:txt
复制
am
代码语言:txt
复制
2
代码语言:txt
复制
4
代码语言:txt
复制
print(m.groups())
代码语言:txt
复制
('I', 'am')

查找

  • search(str, [, pos, endpos]): 在字符串中查找匹配,pos和endpos表示起始位置
  • findall: 查找所有
  • finditer:查找,返回一个iter结果
代码语言:txt
复制
import re

p = re.compile(r'\d+')

m = p.search("one12two34three567four")

print(m.group())
代码语言:txt
复制
12
代码语言:txt
复制
rst = p.findall("one12two34three567four")
print(type(rst))

print(rst)
代码语言:txt
复制
<class 'list'>
代码语言:txt
复制
['12', '34', '567']

sub 替换

  • sub(rep1, str, count)
代码语言:txt
复制
# sub替换案例
import re

# \w 包含数字和英文字母
p = re.compile(r'(\w+) (\w+)')

s = "hello 123 wang 456, i love you"

rst = p.sub(r'Hello world', s)
print(rst)
代码语言:txt
复制
Hello world Hello world, Hello world you

匹配中文

  • 大部分中文表示范围是u4e00-u9fa5, 不包括全角标点
代码语言:txt
复制
import re

title = '世界 你好, hello moto'

p = re.compile(r'[\u4e00-\u9fa5]+')
rst = p.findall(title)

print(rst)
代码语言:txt
复制
['世界', '你好']

贪婪和非贪婪

  • 贪婪:尽可能多的匹配, (*)表示贪婪匹配
  • 非贪婪:找到符合条件的最小内容即可,(?)表示非贪婪
  • 正则默认使用贪婪匹配
代码语言:txt
复制
import re

title = u'<div>name</div><div>age</div>'

p1 = re.compile(r'<div>.*</div>')
p2 = re.compile(r'<div>.*?</div>')

m1 = p1.search(title)
print(m1.group())

m2 = p2.search(title)
print(m2.group())
代码语言:txt
复制
<div>name</div><div>age</div>
代码语言:txt
复制
<div>name</div>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正则表达式(RegularExpression, re)
  • 正则的写法
  • RE常用函数
  • 查找
  • sub 替换
  • 匹配中文
  • 贪婪和非贪婪
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档