正则表达式 python

正则表达式是一种匹配字符串的工具。python中通过导入re来实现。
规则:
| | |

Tables含义
\d可以匹配一个数字
\w匹配一个字母或数字
.匹配任意字符
*任意个字符(包括0个)
+表示至少一个字符
?表示0个或1个字符
{n}表示n个字符
{n,}表示至少匹配n次
{n,m}表示n-m个字符
\s匹配一个空格(也包括Tab等空白符),\s+表示至少有一个空格
^表示行的开头
$表示行的结尾

还有一些用法,
“[ ]”:例如数字除了用\d表示之外,还能用[0-9], 字母也可以写成[a-zA-Z]表示其中的任意一个。
举例:

import re
>>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')             
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>     #表示匹配成功
>>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345')              #没有输出表示匹配失败
>>>

有一种情况需要注意
>>> re.match(r'^\d+', '01a3')
<_sre.SRE_Match object; span=(0, 2), match='01'>

我们希望’^\d+’匹配任意个数字,但实际结果却能跟’01a3’匹配上了。match=’01’由此说明’^\d+’匹配的是任意以数字开头的字符,不能保证后续的也是数字。所以正确的方式如下:

>>> re.match(r'^\d+$', '01a345')     #后面要加一个$,这样就能保证所有的字符串都是数字。
>>>

分组:正则表达式还有提取子串的功能。用()表示的就是要提取的分组

>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> m.group(0)       #group(0)始终表示原始配对的项
'010-12345'
>>> m.group(1)       #第一个括号里的内容
'010'
>>> m.group(2)       #第二个括号的内容
'12345'

最后举个实例,剑指offer中的一个题,判断一个字符串是否是数字。
题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
“^[-+]?[0-9]*(.?[0-9]+)?([eE][-+]?[0-9]+)?$”

这个题可以用正则表达式来实现。分为如下几步:
1.正负号的判断:一个数可以存在正负号,也可以不存在。所以我们要用到”?”,同时正负号是只能有一个,是“或”的关系,所以用“[ ]”。最终这一部分的形式为:“^[\-\+]?”或者“^[-+]?”。”^”表示以这个为开头,-和+是有含义的,所以需要用”\”转置,我测试过,当这些符号在”[ ]”里面也是可以不用转义的。
2.整数部分判断:整数部分也可能是不存在的,eg “.98”就表示0.98.所以最终形式为:“[0-9]*”。因为” * “限定了[0-9]是可以为0个或任意多个。
3.小数部分判断:小数部分也是可能出现的。但是只要有小数点出现,那么后面必须会跟上数字,这个时候“( )”就派上用场了。“(\.[0-9]+)?”。这里的数字判断就要用上“+”,表示至少有一个数字,“?”限定的范围是整个“( )”。
4.指数部分判断:这一部分与上一部分类似, “([eE][-+]?[0-9]+)?$”,[eE]后面有可能存在“-+”,所以多了”[+-]?”这部分的判断。同时还有很重要的一点,就是一定要加上“$”,正则式的匹配是以只要能找到pattern的部分就返回值。

完整的表达式为:
pattern = “^[-+]?[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?$”
re.match(p, s)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值