正则表达式入门

正则表达式(Regular Expression,简称regex、regexp或RE)是一种强大的文本处理工具,用于描述、匹配和操作字符串模式。它广泛应用于文本搜索、替换、表单验证等多个领域。本教程将帮助你入门并使用正则表达式。

一、正则表达式的基本概念

正则表达式使用单个字符串来描述一系列符合某个句法规则的字符串搜索模式。这些模式可以用于文本的搜索、替换、过滤等操作。正则表达式由普通字符和特殊字符(元字符)组成,通过组合这些字符,可以构建出复杂的匹配规则。

二、常用语法

  1. 字符匹配

    • .:匹配除换行符之外的任意单个字符。
    • [ ]:匹配括号内的任意一个字符。例如,[abc]匹配abc
    • [^ ]:匹配不在括号内的任意字符。例如,[^abc]匹配除abc之外的任意字符。
    • \d:匹配任意数字,等价于[0-9]
    • \w:匹配任意字母、数字或下划线,等价于[a-zA-Z0-9_]
    • \s:匹配任意空白字符,包括空格、制表符、换行符等。
  2. 数量词

    • *:匹配前面的字符零次或多次。
    • +:匹配前面的字符一次或多次。
    • ?:匹配前面的字符零次或一次。
    • {n}:匹配前面的字符恰好n次。
    • {n,}:匹配前面的字符至少n次。
    • {n,m}:匹配前面的字符至少n次,至多m次。
  3. 位置匹配

    • ^:匹配字符串的开头。
    • $:匹配字符串的结尾。
    • \b:匹配单词边界。
    • \B:匹配非单词边界。
  4. 转义字符

    • \:用于转义特殊字符,使其变为普通字符。例如,\.匹配点号.本身。
  5. 分组与捕获

    • ():用于分组,可以捕获匹配的子串。例如,(abc)+匹配一个或多个连续的abc
    • |:逻辑或操作符,用于匹配多个选项之一。例如,a|b匹配ab
  6. 三、实例演示
  7. 匹配邮箱地址

    ^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,}$

    解释:以字母或数字开头,后面跟着@符号,然后是字母或数字的域名部分,最后是以点号开头的顶级域名(至少两个字母)。

  8. 匹配电话号码

    ^\d{3}-\d{4}-\d{4}$

    解释:匹配格式为XXX-XXXX-XXXX的电话号码,其中X代表数字。

  9. 提取HTML标签中的内容

    <(.*?)>(.*?)</\1>

    解释:匹配HTML标签及其内容,其中\1表示第一个捕获组,即标签名。

  10. 匹配以字母a开头的单词

    \ba\w*\b
  11. 匹配包含数字的字符串

    \d+
  12. 匹配以abc结尾的字符串

    .*abc$

实例演示
  1. 验证邮箱地址

     
    import re
    
    def val_email(email):
        pattern = r"^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,}$"
        if re.match(pattern, email):
            print("有效的email")
        else:
            print("无效的email!!")
    
    val_email(email="snb@smartnotebook.tech")

  2. 从字符串中提取数字

  3. import re
    
    def extract_numbers(text):
        pattern = r"\d+"
        return re.findall(pattern, text)
    
    print(extract_numbers("There are over 1000 views of Snb's articles."))

  4. 验证电话号码

    import re
    
    def is_valid_phone_number(phone_number):
        pattern = r"^\d{3}-\d{4}-\d{4}$"
        return bool(re.match(pattern, phone_number))
    
    print(is_valid_phone_number("137-1234-5678"))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值