正则表达式

1. 认识正则表达式

from re import fullmatch,search

正则表达式: 解决字符串问题的工具(让复杂的字符串问题变得简单的一个工具)。

问题:验证输入的手机号是否合法

abc - 不是
123 - 不是
12345678901 - 不是
13345678905 - 合法
133456789900 - 不合法

# 方法1:
def is_tel_num(tel_no:str):
    if len(tel_no) != 11:
        return False

    if tel_no[0] != 1:
        return False

    if tel_no[1] not in '3456789':
        return False

    return tel_no.isdigit()


tel = '12345641548'
print(is_tel_num(tel))


from re import fullmatch


# 方法2:
def is_tel_num2(tel_no:str):
    return fullmatch(r'1[3-9]\d{9}',tel_no) != None


tel = '13a345641548'
print(is_tel_num2(tel))

2. 匹配类符号

from re import fullmatch,search

2.1 认识re模块

1)re模块是python用来支持正则表达式的一个模块;

2)re模块中提供了各种和正则相关的函数:fullmatch、search、findall、match、split、sub等等;

3)fullmatch(正则表达式,字符串) - 判断整个字符串是否完全符合正则表达式描述的规则。如果不符合返回值是None。

4)python中提供正则表达式的方式:r’正则表达式’

js中提供正则表达式的方式:/正则表达式/

2.2 匹配类符号

1)一个正则符号表示一类字符。

2)匹配类符号在正则中的作用:用来要求字符串中某个位置必须是什么样的字符。

2.2.1 普通符号

在正则表达式中表示这个符号本身,对应字符串中的字符的要求就是符号本身。

#要求字符串:总共有三个字符,第一个是'a',第二个是'b',第三个是'c'
result = fullmatch(r'abc','abc')
print(result)    # <re.Match object; span=(0, 3), match='abc'>

result = fullmatch(r'abc','bac')
print(result)    # None

result = fullmatch(r'abc','bacd')
print(result)    # None
2.2.2 . - 匹配一个任意字符
#要求字符串:总共有三个字符,第一个是'a',第二个随便是什么(可以是任何符号),第三个是'c'
result = fullmatch(r'a.c','a*c')
print(result)    # <re.Match object; span=(0, 3), match='a*c'>
2.2.3 \d - 匹配一个任意数字
#要求字符串:总共有三个字符,第一个是'a',第二个是一个任意数字,第三个是'c'
result = fullmatch(r'a\dc','a5c')
print(result)    # <re.Match object; span=(0, 3), match='a5c'>

# 3个任意数字,2个任意符号
result = fullmatch(r'\d\d\d..','154分别')
print(result)
2.2.4 \s - 匹配任意一个空白字符
# 空白字符包括:空格,\n,\t,\r
result = fullmatch(r'a\sb','a b')
print(result)

result = fullmatch(r'a\sb','a\nb')
print(result)

result = fullmatch(r'a\sb','a\tb')
print(result)
2.2.5 \w - 匹配任意一个数字、字母或者下划线或者中文
result = fullmatch(r'a\wb','a和b')
print(result)
2.2.6 \ 大写字母 - 与相应的小写字母的功能相反

\D - 匹配任意一个非数字字符
\S - 匹配任意一个非空白字符串
\W - 匹配任意一个非数字、非字母或者非下划线或者非中文

result = fullmatch(r'a\Db','a2b')
print(result)    # None
result = fullmatch(r'a\Sb','a\tb')
print(result)    # None
2.2.7 [字符集] - 匹配字符集中任意一个字符

注意:一个[]只能匹配一个字符。

1)[多个普通符号] - 例如:[abc123],在’a’、‘b’、‘c’、‘1’、‘2’、'3’中六个符号中任意选一个可以匹配;

2)[包含\开头的特殊符号] - 例如:[mn\d]、[m\dn]、[\dmn],要求是m或者n或者的任意一个数字;

3)[字符1-字符2] - 例如:

[a-z],要求是任意一个小写字母

[a-zA-Z],要求是任意一个字母

[2-9a-z],要求是2到9任意数字或者任意小写字母

[\u4e00-\u9fa5],要求是任意一个中文

[\u4e00-\u9fa5\dabc],要求是任意一个中文,或者数字或者’a’、‘b’、‘c’

注意:[]中如果-不在两个字符之间,就不能表示谁到谁,那他就是个普通字符。

result = fullmatch(r'a[xyz123]b','a1b')
print(result)    # <re.Match object; span=(0, 3), match='a1b'>

result = fullmatch(r'a[mn\d]b','a1b')
print(result)    # <re.Match object; span=(0, 3), match='a1b'>

result = fullmatch(r'a[a-z]b','abb')
print(result
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值