广告联盟怎么接单/seo搜索优化网站推广排名

广告联盟怎么接单,seo搜索优化网站推广排名,php网站建设到护卫神,江门seo咨询Python 正则表达式模块 re flyfish 一、正则表达式基础 1. 什么是正则表达式? 正则表达式(Regular Expression, RE)是一种用于匹配、查找和替换文本模式的工具,由普通字符(如字母、数字)和特殊字符&…

Python 正则表达式模块 re

flyfish

一、正则表达式基础

1. 什么是正则表达式?

正则表达式(Regular Expression, RE)是一种用于匹配、查找和替换文本模式的工具,由普通字符(如字母、数字)和特殊字符(元字符)组成。

2. 常用元字符
元字符说明示例
.匹配任意单个字符(除换行符)a.cabc, adc
\w匹配字母、数字或下划线\w+hello123
\d匹配数字\d{3}123
\s匹配空白字符(空格、制表符等)\s+ → 多个空格
*匹配前一个字符零次或多次ab*a, ab, abb
+匹配前一个字符一次或多次ab+ab, abb
?匹配前一个字符零次或一次ab?aab
^匹配字符串开头^abc → 以abc开头
$匹配字符串结尾abc$ → 以abc结尾

二、Python 正则表达式模块 re

1. 模块导入
import re
2. 常用函数
函数名作用描述
re.compile()编译正则表达式,提高重复使用效率
re.match()从字符串开头匹配模式
re.search()在字符串任意位置搜索模式
re.findall()查找所有匹配项,返回列表
re.finditer()查找所有匹配项,返回迭代器
re.sub()替换匹配项
re.subn()替换匹配项并返回替换次数
re.split()按模式分割字符串
re.fullmatch()要求整个字符串完全匹配模式

三、核心功能详解

1. 匹配操作
  • re.match()(从开头匹配)
    match = re.match(r'hello', 'hello world')
    print(match.group())  # 输出: hello
    

match = re.search(r'```json(.*?)```', content, re.DOTALL)

re.search() 函数

re.search(pattern, string, flags=0)re 模块中的一个函数,用于在字符串 string 中搜索第一个与模式 pattern 匹配的子字符串。如果找到匹配项,则返回一个匹配对象;如果没有找到,则返回 None

  • pattern:要搜索的正则表达式模式。
  • string:要在其中进行搜索的字符串,这里是 content
  • flags:可选参数,用于指定正则表达式的匹配模式。这里使用了 re.DOTALL
正则表达式模式 r'```json(.*?)```'
  • r:在字符串前面加上 r 表示这是一个原始字符串。在原始字符串中,反斜杠 \ 不会被当作转义字符处理,这样可以避免在编写正则表达式时出现过多的转义字符,提高代码的可读性。
  • json ````:这是一个普通的字符串,表示匹配以 json ````开头的文本。
  • (.*?):这是一个捕获组,用于匹配任意字符(除换行符外,除非使用了 re.DOTALL 标志)。
    • .:匹配除换行符外的任意单个字符。
    • *:表示前面的字符(即 .)可以出现零次或多次。
    • ?:在 * 后面加上 ? 表示非贪婪匹配。贪婪匹配会尽可能多地匹配字符,而非贪婪匹配会尽可能少地匹配字符。例如,如果字符串中有多个 json...代码块,非贪婪匹配会只匹配到第一个 ```````````就停止。
  • :表示匹配以 结尾的文本。
re.DOTALL 标志

re.DOTALLre 模块中的一个标志,它会改变 . 的匹配行为。默认情况下,. 不匹配换行符,但使用 re.DOTALL 后,. 可以匹配包括换行符在内的任意字符。这意味着代码块中可以包含换行符,能够正确匹配多行的 JSON 代码块。

  • re.search()(全局搜索)
    search = re.search(r'world', 'hello world')
    print(search.group())  # 输出: world
    
2. 查找所有匹配项
  • re.findall()
    numbers = re.findall(r'\d+', 'a123b456c')
    print(numbers)  # 输出: ['123', '456']
    
3. 替换操作
  • re.sub()
    text = re.sub(r'\d+', 'X', 'a123b456c')
    print(text)  # 输出: aXbXc
    
4. 分割字符串
  • re.split()
    parts = re.split(r'\s+', 'hello   world')
    print(parts)  # 输出: ['hello', 'world']
    

四、捕获组与 group() 方法

1. 基本用法
pattern = r'(\d{4})-(\d{2})-(\d{2})'
date_str = '2025-03-11'
match = re.search(pattern, date_str)print(match.group(0))  # 完整匹配结果 → '2025-03-11'
print(match.group(1))  # 第一个捕获组 → '2025'
print(match.group(2))  # 第二个捕获组 → '03'
print(match.group(3))  # 第三个捕获组 → '11'
2. 查看捕获组数量
  • 使用 groups()
    groups = match.groups()
    print(len(groups))  # 输出: 3
    
  • 命名捕获组(使用 groupdict()
    pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
    match = re.search(pattern, date_str)
    print(match.groupdict())  # 输出: {'year': '2025', 'month': '03', 'day': '11'}
    

五、re.match vs re.search

基本概念对比
  • re.match:该函数会从字符串的起始位置开始尝试匹配正则表达式模式。如果字符串的起始位置不符合模式,即使字符串的其他部分存在匹配内容,re.match 也会返回 None。也就是说,它要求模式必须从字符串的第一个字符开始匹配成功。
  • re.search:此函数会在整个字符串中进行搜索,查找与正则表达式模式匹配的第一个位置。只要字符串中存在一处符合模式的内容,re.search 就会返回一个匹配对象。
详细示例对比
示例 1:模式在字符串起始位置匹配
import re# 定义字符串和模式
pattern = r'hello'
string = 'hello world'# 使用 re.match
match_result = re.match(pattern, string)
if match_result:print("re.match 匹配成功,匹配内容为:", match_result.group())
else:print("re.match 匹配失败")# 使用 re.search
search_result = re.search(pattern, string)
if search_result:print("re.search 匹配成功,匹配内容为:", search_result.group())
else:print("re.search 匹配失败")

结果分析:在这个例子中,模式 'hello' 位于字符串 'hello world' 的起始位置。因此,re.matchre.search 都能成功匹配,并且都能返回匹配到的 'hello'

示例 2:模式不在字符串起始位置
import re# 定义字符串和模式
pattern = r'world'
string = 'hello world'# 使用 re.match
match_result = re.match(pattern, string)
if match_result:print("re.match 匹配成功,匹配内容为:", match_result.group())
else:print("re.match 匹配失败")# 使用 re.search
search_result = re.search(pattern, string)
if search_result:print("re.search 匹配成功,匹配内容为:", search_result.group())
else:print("re.search 匹配失败")

结果分析:模式 'world' 不在字符串 'hello world' 的起始位置,所以 re.match 会匹配失败,返回 None。而 re.search 会在整个字符串中搜索,能够找到 'world' 并返回匹配对象,输出匹配内容 'world'

示例 3:模式部分在起始位置但不完全匹配
import re# 定义字符串和模式
pattern = r'hello world!'
string = 'hello world'# 使用 re.match
match_result = re.match(pattern, string)
if match_result:print("re.match 匹配成功,匹配内容为:", match_result.group())
else:print("re.match 匹配失败")# 使用 re.search
search_result = re.search(pattern, string)
if search_result:print("re.search 匹配成功,匹配内容为:", search_result.group())
else:print("re.search 匹配失败")

结果分析:模式 'hello world!' 虽然前部分 'hello world' 与字符串起始部分相同,但整体模式不完全匹配,所以 re.match 会失败。re.search 同样在整个字符串中找不到完全匹配的内容,也会匹配失败。

性能考虑
  • re.match:由于它只从字符串起始位置开始匹配,不需要对整个字符串进行遍历,在某些情况下性能可能会更好,特别是当你明确知道要匹配的内容应该在字符串开头时。
  • re.search:需要遍历整个字符串来查找匹配位置,所以在处理较长字符串时,性能可能会相对较低。但它的灵活性更高,适用于不确定匹配内容位置的情况。

六、正则表达式 re 模块的常用例子

1. 匹配以特定字符开头的字符串

import retext = "apple banana cherry"
pattern = r'^apple'
result = re.search(pattern, text)
if result:print("匹配成功:", result.group())
else:print("匹配失败")

2. 匹配以特定字符结尾的字符串

import retext = "apple banana cherry"
pattern = r'cherry$'
result = re.search(pattern, text)
if result:print("匹配成功:", result.group())
else:print("匹配失败")

3. 匹配包含特定单词的字符串

import retext = "The quick brown fox jumps over the lazy dog"
pattern = r'fox'
result = re.search(pattern, text)
if result:print("匹配成功:", result.group())
else:print("匹配失败")

4. 匹配连续数字

import retext = "abc123def"
pattern = r'\d+'
result = re.findall(pattern, text)
print("匹配结果:", result)

5. 匹配字母和数字的组合

import retext = "abc123def"
pattern = r'[a-zA-Z0-9]+'
result = re.findall(pattern, text)
print("匹配结果:", result)

6. 匹配邮箱地址

import retext = "example@example.com"
pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
result = re.fullmatch(pattern, text)
if result:print("匹配成功:", result.group())
else:print("匹配失败")

7. 匹配手机号码

import retext = "13800138000"
pattern = r'^1[3-9]\d{9}$'
result = re.fullmatch(pattern, text)
if result:print("匹配成功:", result.group())
else:print("匹配失败")

8. 匹配日期格式(YYYY-MM-DD)

import retext = "2025-03-11"
pattern = r'^\d{4}-\d{2}-\d{2}$'
result = re.fullmatch(pattern, text)
if result:print("匹配成功:", result.group())
else:print("匹配失败")

9. 替换所有数字为指定字符

import retext = "abc123def456"
pattern = r'\d+'
replacement = 'X'
result = re.sub(pattern, replacement, text)
print("替换结果:", result)

10. 分割字符串

import retext = "apple,banana,cherry"
pattern = r','
result = re.split(pattern, text)
print("分割结果:", result)

11. 提取 HTML 标签中的内容

import rehtml = '<p>Hello, World!</p>'
pattern = r'<p>(.*?)</p>'
result = re.findall(pattern, html)
print("提取结果:", result)

12. 匹配中文

import retext = "你好,世界!"
pattern = r'[\u4e00-\u9fa5]+'
result = re.findall(pattern, text)
print("匹配结果:", result)

13. 匹配多个单词中的任意一个

import retext = "cat dog elephant"
pattern = r'cat|dog'
result = re.findall(pattern, text)
print("匹配结果:", result)

14. 匹配重复的字符

import retext = "aaaaabbbccc"
pattern = r'(.)\1+'
result = re.findall(pattern, text)
print("匹配结果:", result)

15. 匹配不包含特定字符的字符串

import retext = "abcde"
pattern = r'[^abc]+'
result = re.findall(pattern, text)
print("匹配结果:", result)

16. 匹配单词边界

import retext = "The quick brown fox jumps"
pattern = r'\bfox\b'
result = re.search(pattern, text)
if result:print("匹配成功:", result.group())
else:print("匹配失败")

17. 匹配 IP 地址

import retext = "192.168.1.1"
pattern = r'^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'
result = re.fullmatch(pattern, text)
if result:print("匹配成功:", result.group())
else:print("匹配失败")

18. 匹配 URL

import retext = "https://www.example.com"
pattern = r'^https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+'
result = re.fullmatch(pattern, text)
if result:print("匹配成功:", result.group())
else:print("匹配失败")

19. 统计匹配次数

import retext = "apple apple banana cherry apple"
pattern = r'apple'
matches = re.findall(pattern, text)
count = len(matches)
print("匹配次数:", count)

20. 使用编译后的正则表达式进行匹配

import retext = "abc123def"
pattern = re.compile(r'\d+')
result = pattern.findall(text)
print("匹配结果:", result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

环境配置 | 5分钟极简Git入门:从零上手版本控制

你是否刚接触Git&#xff1f;别担心&#xff01;这篇指南将用最简单的步骤带你掌握Git核心操作&#xff0c;快速开启版本控制之旅&#xff01;✨ 1.git在win10上的下载安装 1.1.下载git 打开官方网站 Git - Downloadshttps://git-scm.com/downloads ​ ​​ 1.2.git安装 …

计算机网络——DNS

一、什么是DNS&#xff1f; DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09; 是互联网的核心服务&#xff0c;负责将人类可读的域名&#xff08;如 www.baidu.com&#xff09;转换为机器可识别的 IP地址&#xff08;如 14.119.104.254&#xff09;。它像一…

SQLark 实战 | 如何从Excel、csv、txt等外部文件进行数据导入

数据导入导出是应用开发者在平时开发中最常用的操作之一&#xff0c;SQLark 里提供了方便的图形化界面来完成导入导出。本文先和大家分享如何从 Excel、csv、txt 等外部文件导入数据到数据库表中。 &#x1f449; 前往 SQLark 官网&#xff1a;www.sqlark.com 下载全功能免费版…

钉钉(excel)能让表格中不是‘北京’的字符串自动加亮显示(方便查看)以及隔行填充严颜色是斑马色(方便查看)嘛

在钉钉在线表格中&#xff0c;虽然功能相对Excel有所简化&#xff0c;但仍然可以通过条件格式实现对特定内容的高亮显示。以下是具体步骤&#xff1a; 一、在钉钉在线表格中设置条件格式 1. 打开钉钉在线表格 登录钉钉&#xff0c;进入“钉钉在线表格”应用。 打开你需要操作…

Windows根据文件名批量在文件夹里查找文件并复制出来,用WPF实现的详细步骤

项目前言 在日常工作和生活中&#xff0c;我们常常会遇到需要从大量文件中根据文件名批量查找特定文件并复制到指定位置的情况。手动一个个查找和复制文件不仅效率低下&#xff0c;还容易出错。使用 Windows Presentation Foundation (WPF) 可以创建一个用户友好的图形界面应用…

探索Maas平台与阿里 QWQ 技术:AI调参的魔法世界

摘要&#xff1a;本文介绍了蓝耘 Maas 平台在人工智能领域的表现及其核心优势&#xff0c;包括强大的模型支持、高效的资源调度和友好的操作界面。文章还探讨了蓝耘 Maas 平台与阿里 QWQ 技术的融合亮点及应用拓展实例&#xff0c;并提供了调参实战指南&#xff0c;最后对蓝耘 …

Python 实现大文件的高并发下载

项目背景 基于一个 scrapy-redis 搭建的分布式系统&#xff0c;所有item都通过重写 pipeline 存储到 redis 的 list 中。这里我通过代码演示如何基于线程池 协程实现对 item 的中文件下载。 Item 结构 目的是为了下载 item 中 attachments 保存的附件内容。 {"crawl_tim…

MySQL与Canal、RabbitMQ集成指南

MySQL 部分 1. 查看是否开启 binlog MySQL 8 默认开启 binlog。可以通过以下命令查看是否开启&#xff1a; SHOW VARIABLES LIKE log_bin;如果返回结果为 ON&#xff0c;则表示 binlog 已开启。 Variable_nameValuelog_binON 2. 若未开启 binlog&#xff0c;则需手动配置 …

X86 RouterOS 7.18 设置笔记十:上海电信IPTV使用msd_lite实现组播转单拨

X86 j4125 4网口小主机折腾笔记五&#xff1a;PVE安装ROS RouterOS X86 RouterOS 7.18 设置笔记一&#xff1a;基础设置 X86 RouterOS 7.18 设置笔记二&#xff1a;网络基础设置(IPV4) X86 RouterOS 7.18 设置笔记三&#xff1a;防火墙设置(IPV4) X86 RouterOS 7.18 设置笔记四…

LeetCode 解题思路 17(Hot 100)

解题思路&#xff1a; 找到链表中点&#xff1a; 使用快慢指针法&#xff0c;快指针每次移动两步&#xff0c;慢指针每次移动一步。当快指针到达末尾时&#xff0c;慢指针指向中点。递归分割与排序&#xff1a; 将链表从中点处分割为左右两个子链表&#xff0c;分别对这两个子…

「自动驾驶背后的数学:从传感器数据到控制指令的函数嵌套」—— 揭秘人工智能中的线性函数、ReLU 与复合函数

引言 自动驾驶技术是人工智能领域的一个重要应用&#xff0c;其核心在于如何将传感器数据转化为车辆控制指令。这一过程涉及大量的数学知识&#xff0c;包括线性函数、激活函数&#xff08;如 ReLU&#xff09;以及复合函数的嵌套使用。本文将深入探讨自动驾驶中的数学原理&am…

Redis超高并发分key实现

Redis扛并发的能力是非常强的&#xff0c;所以高并发场景下经常会使用Redis&#xff0c;但是Redis单分片的写入瓶颈在2w左右&#xff0c;读瓶颈在10w左右&#xff0c;如果在超高并发下即使是集群部署Redis&#xff0c;单分片的Redis也是有可能扛不住的&#xff0c;如下图所示&a…

Webpack 前端性能优化全攻略

文章目录 1. 性能优化全景图1.1 优化维度概览1.2 优化效果指标 2. 构建速度优化2.1 缓存策略2.2 并行处理2.3 减少构建范围 3. 输出质量优化3.1 代码分割3.2 Tree Shaking3.3 压缩优化 4. 运行时性能优化4.1 懒加载4.2 预加载4.3 资源优化 5. 高级优化策略5.1 持久化缓存5.2 模…

虚拟电商-数据库分库分表(二)

本文章介绍&#xff1a;使用Sharding-JDBC实现数据库分库分表&#xff0c;数据库分片策略&#xff0c;实现数据库按月分表 一、Sharding-JDBC使用 1.1.准备环境 步骤一&#xff1a;分库分表sql脚本导入 创建了两个数据库&#xff1a;chongba_schedule0 和chongba_schedule1…

向量数据库对比以及Chroma操作

一、向量数据库与传统类型数据库 向量数据库&#xff08;Vector Storage Engine&#xff09;与传统类型的数据库如关系型数据库&#xff08;MySQL&#xff09;、文档型数据库&#xff08;MongoDB&#xff09;、键值存储&#xff08;Redis&#xff09;、全文搜索引擎&#xff0…

美畅物联丨WebRTC 技术详解:构建实时通信的数字桥梁

在互联网技术飞速发展的今天&#xff0c;实时通信已成为数字生活的核心需求。WebRTC作为一个开源项目&#xff0c;凭借卓越的技术实力与创新理念&#xff0c;为网页和移动应用带来了颠覆性的实时通信能力。它突破了传统通信方式的限制&#xff0c;实现了音频、视频和数据在用户…

excel中两个表格的合并

使用函数&#xff1a; VLOOKUP函数 如果涉及在excel中两个工作表之间进行配对合并&#xff0c;则&#xff1a; VLOOKUP(C1,工作表名字!A:B,2,0) 参考&#xff1a; excel表格中vlookup函数的使用方法步骤https://haokan.baidu.com/v?pdwisenatural&vid132733503560775…

怎么鉴别金媒v10.51和v10.5的区别!单单从CRM上区分!

2.怎么鉴别程序是10.5还是10.51 &#xff1f;* 作为商业用户&#xff0c;升级完全没有这个担心&#xff0c;但是这次升级从全局来看清晰度不是很高&#xff0c;不像10.5的升级后台UI都变化了&#xff01;你说有漏洞但是我没遇到过 所以我也不知道升级了啥只能看版本数字是无法区…

【Oracle】19c数据库控制文件多路径配置

一、关闭数据库&#xff08;2个节点实例都要关闭&#xff09; srvctl stop database -d ora19c 二、多路径控制文件 打开其中一个节点到nomount状态 sqlplus / as sysdba startup nomount; [oracleora19c1:/home/oracle]$ rman target / RMAN> restore controlfile to…

大模型训练全流程深度解析

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 1. 大模型训练概览1.1 训练流程总览1.2 关键技术指标 2. 数据准备2.1 数据收集与清洗2.2 数据…