• Python基础:正则表达式(regular expression)详解


    在这里插入图片描述

      在Python中,正则表达式是一种强大的工具,可用于匹配和操作字符串。什么是正则表达式? 正则表达式是一种模式匹配语言,用于匹配字符串中的特定模式。这些模式可以是字母、数字、字符组合或其他符号。正则表达式通常用于文本处理、网络编程、数据分析等领域。
      在 Python 中,正则表达式的实现主要基于 re 模块,该模块提供了一组函数和类,用于处理正则表达式的匹配、搜索和替换。

    1. 实现原理:

      正则表达式引擎: Python 中的正则表达式引擎使用了正则表达式的编译和匹配两个主要阶段。
      编译阶段: 在编译阶段,正则表达式字符串会被解析并转换成一个内部的模式表示。这个模式表示了匹配规则,它包括普通字符、元字符、字符类、分组等。
      匹配阶段: 一旦正则表达式被编译,就可以用来匹配字符串。匹配过程是基于模式在字符串中的搜索和比对。引擎会从字符串的起始位置开始,尝试找到与模式匹配的子字符串。
      回溯和优化: 在匹配过程中,可能会涉及到回溯的操作,即引擎试图在字符串中不同位置匹配模式。为了提高性能,引擎会使用一些优化策略,避免不必要的回溯。

    2. 正则表达式

      正则表达式由普通字符和元字符组成。普通字符就是字母、数字、空格等常见字符;元字符则表示特殊含义,例如点号(.)表示任意字符,星号(*)表示零个或多个前面的字符。
      常用的元字符及其含义:
      .:匹配任意单个字符
      \d:匹配数字(等价于 [0-9])
      \w:匹配字母、数字、下划线(等价于 [a-zA-Z0-9_])
      \s:匹配空格、制表符、换行符等空白字符
      ^:匹配开头
      $:匹配结尾
      *:匹配前面的字符零次或多次
      +:匹配前面的字符一次或多次
      ?:匹配前面的字符零次或一次
      []:匹配方括号中任意一个字符
      ():将其中的内容作为一个组

    3.常见示例:

    3.1 匹配手机号码

    import re
    
    pattern = r"\d{11}"
    string = "My phone number is 12345678901"
    match_result = re.search(pattern, string)
    
    if match_result:
        print("Match found:", match_result.group())
    else:
        print("Match not found")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.2 匹配邮政编码

    import re
    
    pattern = r"\b\d{6}\b"
    string = "The postal code is 123456"
    match_result = re.search(pattern, string)
    
    if match_result:
        print("Match found:", match_result.group())
    else:
        print("Match not found")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.3 提取HTML标签中的内容

    import re
    
    pattern = r"<.*?>"
    html_string = "

    This is a bold statement.

    "
    match_result = re.findall(pattern, html_string) print("Matches found:", match_result)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.4 提取HTML中的链接(href属性)

    import re
    
    pattern = r'href="(.*?)"'
    html_code = 'Visit our website'
    match_result = re.search(pattern, html_code)
    
    if match_result:
        print("Match found:", match_result.group(1))
    else:
        print("Match not found")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.5 匹配IP地址

    import re
    
    pattern = r"\b(?:\d{1,3}\.){3}\d{1,3}\b"
    string = "Server's IP address is 192.168.1.1"
    match_result = re.search(pattern, string)
    
    if match_result:
        print("Match found:", match_result.group())
    else:
        print("Match not found")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.6 匹配URL

    import re
    
    pattern = r"https?://\S+"
    text = "Visit our website at https://www.example.com"
    match_result = re.search(pattern, text)
    
    if match_result:
        print("Match found:", match_result.group())
    else:
        print("Match not found")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.7 匹配日期(yyyy-mm-dd)

    import re
    
    pattern = r"\b\d{4}-\d{2}-\d{2}\b"
    text = "Event date: 2022-12-31"
    match_result = re.search(pattern, text)
    
    if match_result:
        print("Match found:", match_result.group())
    else:
        print("Match not found")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.8 匹配邮箱地址

    import re
    
    pattern = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b"
    text = "Contact us at info@example.com or support@company.net"
    match_result = re.findall(pattern, text)
    
    print("Matches found:", match_result)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.9 匹配全名中的姓氏

    import re
    
    pattern = r"\b[A-Z][a-z]+\b"
    full_name = "John Doe"
    match_result = re.findall(pattern, full_name)
    
    print("Matches found:", match_result)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.10 匹配中文名字

    import re
    
    pattern = r'^[\u4e00-\u9fa5]{1,5}$'
    name = "王小明"
    
    match_result = re.match(pattern, name)
    
    if match_result:
        print("Match found:", match_result.group())
    else:
        print("Match not found")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.11 匹配字符串中的所有单词

    import re
    
    pattern = r"\b\w+\b"
    text = "This is a simple example."
    match_result = re.findall(pattern, text)
    
    print("Matches found:", match_result)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

  • 相关阅读:
    java 常用正则表达式记录
    EOCR电机保护器的日常维护与保养技巧
    相关性分析中如何用标准差判断差异大小
    2024年腾讯云轻量16核32G28M服务器优惠价格3468元15个月
    Python简单实现人脸识别检测, 对某平台美女主播照片进行评分排名
    计算机网络:应用层 - 文件传输协议 FTP & 电子邮件
    19、L298N 电机驱动板
    Spring的copy属性
    Jenkins部署python接口自动化测试
    DevOps | 产研协同效能提升之评审、审批流、质量卡点
  • 原文地址:https://blog.csdn.net/Snailandfish/article/details/134449986