正则表达式和python结合

本文介绍了正则表达式的基本符号和特殊符号,详细讲解了如何在Python中使用`re`模块进行匹配、切分和分组操作。通过实例展示了贪婪匹配的概念,并提到了正则表达式的编译以提高效率。
摘要由CSDN通过智能技术生成

常见正则表达式符号和特殊符号表

记号
说明
实例
literal
匹配字符串的值
abc
re1|re2
匹配正则表达式re1或re2
abc|123
.(dot)
匹配任何字符,换行符除外 (但编译标记[S或DOTALL能推翻这个限制])
a.a
^
匹配字符串的开始
^Hi
$
匹配字符串的结尾
doc$
*
匹配前面出现的正则表达式零次 或多次
[A-Za-z0-9]*
+
匹配前面出现的正则表达式一次 或多次
[a-z]+
?
匹配前面出现的正则表达式零次 或一次
foo?
{N}
匹配前面出现的正则表达式N次
[0-9]{3}
{M, N}
匹配重复出现M次  到  N次的正则表达式
[0-9]{5, 9}
[...]
匹配字符组里出现的任意一个字符
[aeiou]
[..x-y..]
匹配从字符x到y中任意一个字符
[0-9], [A-Z], [a-z]
[^...]
不匹配此字符集中出现的任何一个字符,包括某一范围的字符
[^aeiou], [^a-z]
(*|+|?|{})?
用于上面出现的任何“非贪婪” 版本重复匹配次数符号(*, +, ?, {})
.*?[a-z]
(...)
匹配封闭括号中的正则表达式,并保持为子组
([0-9]{3})?
特殊字符


\d
匹配任何数字,和[0-9]一样,\d是\d的反义:表示任何非数字符
data\d+.txt
\w
匹配任何数字字母字符,和[A-Za-z0-9]相同,\W是\w的反义
[a-z_]\w+
\s
匹配任何空白符,和[\n \t \r \v \f]相同,\S是\s的反义
of\sthe
\b
匹配单词边界,\B是\b的反义
\bThe\b
\nn
匹配已保存的子组
price:\16
\c
逐一匹配特殊字符c,即,取消它的特殊含义,按字面匹配
\., \\, \*
\A(\Z)
匹配字符串的起始(结束)
\ADear


python 通过标准库中的re模块支持正则表达式

{N}:匹配N次前面出现的正则表达式;做更精确地匹配,可以用[]表示范围,用()表示的就是要提取的分组(Group)
比如:[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;
 \d可以匹配一个数字,\w可以匹配一个字母或数字

使用Python的r前缀,就不用考虑转义的问题了:
s = r'ABC\-001' # Python的字符串
# 对应的正则表达式字符串不变:
# 'ABC\-001'
切分字符串
>>> re.split(r'[\s\,]+', 'a,b, c  d')
['a', 'b', 'c', 'd']

在正则表达式中,如果直接给出字符,就是精确匹配。用\d可以匹配一个数字,\w可以匹配一个字母或数字,所以:

  • '00\d'可以匹配'007',但无法匹配'00A'

  • '\d\d\d'可以匹配'010'

  • '\w\w\d'可以匹配'py3'

.可以匹配任意字符,所以:

  • 'py.'可以匹配'pyc''pyo''py!'等等。

要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:

来看一个复杂的例子:\d{3}\s+\d{3,8}

我们来从左到右解读一下:

  1. \d{3}表示匹配3个数字,例如'010'

  2. \s可以匹配一个空格(也包括Tab等空白符),所以

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值