python 正则表达式

2022-05-09 18:25:19 浏览数 (1)

目录

  • 正则表达式
    • 前言
    • re模块:
    • 正则表达式常用字符
    • 正则表达式练习:
      • 贪婪匹配与非贪婪匹配的关系:
      • 正则在线测试工具:

正则表达式

前言

1、正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

2、正则表达式的使用非常的广泛,是一门独立的语言,基本各个领域都有所使用,如果在python代码中使用正则,需要借助于内置模块re

re模块:

代码语言:javascript复制
import re
re.match #从开始位置开始匹配,如果开头没有则无

re.search #搜索整个字符串

re.findall #搜索整个字符串,返回一个list

对比以下两个例子:

代码语言:javascript复制
'''手机号在国内规定为11位,纯数字,有固定的格式'''
# 要求,获取用户手机号判断是否合理
# 手机号开头用13,18,19举例

# 不使用正则实现
user_phone_number = input('please input your phone number:').strip()
if len(user_phone_number) == 11:
    if user_phone_number.isdigit():
        if user_phone_number.startswith('13') or user_phone_number.startswith('18') or user_phone_number.startswith('19'):
            print('Your phone number is up to standard!')
else:
    print('Your phone is not up to standard!' )
    
    
# 使用正则实现
import re
user_phone_number = input('please input your phone number:').strip()
if re.match('^(13|14|15|18)[0-9]{9}$',user_phone_number):
    print('Your phone number is up to standard!')
else:
    print('Your phone is not up to standard!' )

可以很容易看出来使用正则减轻了不少代码的编写,如果去实现一些有规律可循,有固定的格式,比如爬取固定的内容,标签的格式一定是固定的,这时候可以使用正则表达式会减轻你的代码编写,下面介绍一些正则表达式常用的字符,以及组合使用。

正则表达式常用字符

  • 总结表格如下:

字符组:

字符

描述

待匹配字符

匹配结果

[0123456789]/[0-9]

表示0-9内的数字

2

True

[a-z]

表示小写26字母

a

True

[A-Z]

表示大写26字母

A

True

[0-9a-zA-Z]

匹配所有的数字,小写大写字母

2eE

True

特殊符号:

字符

描述

.

匹配除换行符以外的任意字符

d

匹配数字

^

匹配字符串的开始字符

$

匹配字符串的结尾字符

a|b

匹配字符a或字符b

()

匹配括号内的表达式,也表示一个组

[...]

匹配字符组中的字符

[^...]

匹配除了字符组中字符的所有字符

量词组:

  • 上面两个表格中,如果没有量词修饰的情况下,个个匹配的都是单个字符
  • 量词的使用也必须结合字符串,特殊字符等一起使用,不能单独出现
  • 量词只能影响前面的一个表达式(abc ,只能影响c)

字符

描述

*

重复零次或更多次

重复一次或更多次

重复零次或一次

{n}

重复n次

{n,}

重复n次或更多次

{n,m}

重复n到m次

正则表达式练习:

匹配HammerZe字符的所有字符

匹配HammerZe字符中的H

匹配HammerZe字符中的Ze

匹配HammerZeHammerZeHammerZe这个字符中的所有Hammer

匹配HammerZeHammerZeHammerZe字符中的前两个HammerZe

注意,这个{1,8}的意思是匹配1到8次任意字符,默认位最大次,正则匹配的原则是贪婪匹配。

有贪婪匹配,那么就会有惰性匹配(.*?),如下: 匹配HammerZeHammerZeHammerZe字符中的H

贪婪匹配与非贪婪匹配的关系:

示例如下:

代码语言:javascript复制
'''字符<script>123</script>'''
  • 贪婪匹配:.*,尽可能多的匹配
  • 惰性匹配:.*?,尽可能少的匹配

正则在线测试工具: