当前位置: 首页 > news >正文

Python3正则表达式:字符串魔法师的指南[特殊字符]‍♂️

Python3正则表达式

    • 什么是正则表达式?
    • 在Python中使用正则表达式
    • 一、正则表达式基础语法:你的魔法咒语
      • 基本匹配符
      • 字符类:性格各异的字符们
      • 预定义字符类:常见角色的快捷方式
      • 重复限定符:贪婪的收集者
      • 贪婪vs非贪婪:胃口大小问题
      • 分组与捕获:给模式戴上名牌
    • 二、Python中的re模块:施展魔法的工具箱
      • 主要函数
      • 常用标志
    • 三、实际例子:魔法入门
      • 1. 验证邮箱地址
      • 2. 提取文本中的日期
      • 3. 提取并处理HTML标签
      • 4. 分割CSV,但忽略引号内的逗号
    • 四、正则表达式调试技巧:魔法训练
    • 五、正则表达式性能注意事项:魔力消耗控制
    • 总结:正则表达式修炼指南
    • 练习题:小试身手
      • 1.验证中国手机号码
      • 2. 从文本中提取所有URL链接
      • 3. 验证IPv4地址
      • 4. 提取Twitter风格的标签
      • 综合示例应用

什么是正则表达式?

想象一下,你是一位文本世界的探险家,需要在茫茫字符海洋中寻找特定的"宝藏"(模式)。正则表达式就是你的"寻宝地图"!

正则表达式(Regular Expression,简称regex)是一种强大的字符串搜索、匹配和操作的模式语言。它就像一个超级搜索工具,能帮你:

  • 🔍 查找特定模式的文本
  • ✂️ 替换文本中的特定内容
  • ✅ 验证文本是否符合特定格式(如邮箱、电话号码)
  • 🪓 分割文本为多个部分

在Python中使用正则表达式

Python通过re模块提供正则表达式支持:

import re

一、正则表达式基础语法:你的魔法咒语

基本匹配符

符号作用就像在说…
.匹配任意单个字符(除了换行符)“我不挑食,给我任何一个字符就行!”
^匹配字符串开头“我只关心句子的开头!”
$匹配字符串结尾“我只看结局!”
\转义特殊字符“别用魔法攻击我,这只是个普通字符!”

字符类:性格各异的字符们

符号作用就像在说…
[abc]匹配方括号内的任意一个字符“给我一个a或b或c就满足了”
[^abc]匹配除了方括号内的任意字符“除了abc,我都喜欢!”
[a-z]匹配a到z范围内的任意小写字母“给我一个小写字母就行”
[A-Z]匹配A到Z范围内的任意大写字母“我只收大写字母!”
[0-9]匹配任意数字“数字就行,不挑”

预定义字符类:常见角色的快捷方式

符号作用就像在说…
\d匹配任意数字,等同于[0-9]“来个数字吧!”
\D匹配任意非数字,等同于[^0-9]“数字以外的都行!”
\w匹配字母、数字或下划线,等同于[a-zA-Z0-9_]“给我一个’单词’字符!”
\W匹配非字母、数字、下划线的字符“不要’单词’字符!”
\s匹配任意空白字符(空格、制表符、换行符等)“我需要一点空间!”
\S匹配任意非空白字符“不要空白!”

重复限定符:贪婪的收集者

符号作用就像在说…
*匹配前面的模式零次或多次“有多少要多少,没有也行!”
+匹配前面的模式一次或多次“至少给我一个,多了也行!”
?匹配前面的模式零次或一次“有一个我就满足了,没有也无所谓”
{n}精确匹配前面的模式n次“我要正好n个,不多不少!”
{n,}匹配前面的模式至少n次“给我至少n个!”
{n,m}匹配前面的模式n到m次“给我n到m个之间,我很好说话的”

贪婪vs非贪婪:胃口大小问题

默认情况下,重复限定符是贪婪的,会尽可能多地匹配:

# 贪婪模式:尽可能多地匹配
re.search(r'a.*b', 'aabab').group()  # 'aabab'

加上?后,变成非贪婪模式,会尽可能少地匹配:

# 非贪婪模式:尽可能少地匹配
re.search(r'a.*?b', 'aabab').group()  # 'aab'

分组与捕获:给模式戴上名牌

符号作用就像在说…
(...)分组并捕获匹配的内容“这几个字符是一伙的,我要记住他们!”
(?:...)分组但不捕获匹配的内容“这几个字符是一伙的,但不用记住他们”
(?P<name>...)命名捕获组“这几个字符是一伙的,叫他们’name’”

二、Python中的re模块:施展魔法的工具箱

主要函数

函数作用记忆小窍门
re.search(pattern, string)在字符串中搜索第一个匹配项“找一找就好”
re.match(pattern, string)从字符串开头匹配模式“必须从头开始找”
re.findall(pattern, string)返回所有匹配项的列表“全都要找出来!”
re.finditer(pattern, string)返回所有匹配项的迭代器“一个一个慢慢找”
re.sub(pattern, repl, string)替换所有匹配项“找到就换掉”
re.split(pattern, string)按匹配项分割字符串“看到就切一刀”
re.compile(pattern)编译正则表达式模式“先准备好魔法卷轴”

常用标志

标志作用记忆小窍门
re.IGNORECASEre.I忽略大小写“A和a都一样”
re.MULTILINEre.M多行模式,使^$匹配每行的开始和结束“每行都很重要”
re.DOTALLre.S使.也能匹配换行符“点点无所不包”

三、实际例子:魔法入门

1. 验证邮箱地址

import redef is_valid_email(email):pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'return bool(re.match(pattern, email))# 测试一下
print(is_valid_email('user@example.com'))  # True
print(is_valid_email('invalid-email'))     # False

2. 提取文本中的日期

import retext = "今天是2023-05-15,明天是2023-05-16,后天是2023/05/17"# 找出所有日期
dates = re.findall(r'\d{4}[-/]\d{2}[-/]\d{2}', text)
print(dates)  # ['2023-05-15', '2023-05-16', '2023/05/17']

3. 提取并处理HTML标签

import rehtml = "<div>Hello <b>Python</b> and <i>Regex</i></div>"# 找出所有标签
tags = re.findall(r'<[^>]+>', html)
print(tags)  # ['<div>', '<b>', '</b>', '<i>', '</i>', '</div>']# 去除所有标签
clean_text = re.sub(r'<[^>]+>', '', html)
print(clean_text)  # 'Hello Python and Regex'

4. 分割CSV,但忽略引号内的逗号

# 这个例子展示了复杂模式的威力
import recsv_line = 'John,"Doe,Jr",New York,USA'# 错误的简单分割
print(csv_line.split(','))  # ['John', '"Doe', 'Jr"', 'New York', 'USA']# 使用正则表达式正确分割
pattern = r',(?=(?:[^"]*"[^"]*")*[^"]*$)'
print(re.split(pattern, csv_line))  # ['John', '"Doe,Jr"', 'New York', 'USA']

四、正则表达式调试技巧:魔法训练

  1. 小步前进:先测试简单的模式,然后逐渐添加复杂度
  2. 在线工具:使用regex101.com等在线工具进行可视化测试
  3. 分组使用:使用分组来隔离和测试正则表达式的各个部分
  4. 命名捕获组:给重要的捕获组命名,增强可读性

五、正则表达式性能注意事项:魔力消耗控制

  1. 避免过度回溯:复杂的嵌套重复限定符可能导致灾难性回溯
  2. 预编译模式:频繁使用的模式应该预编译
    phone_pattern = re.compile(r'\d{3}-\d{3}-\d{4}')
    # 重复使用phone_pattern.search()而不是re.search()
    
  3. 非捕获组:当不需要捕获结果时,使用非捕获组(?:...)提高性能
  4. 适当使用原子组:减少回溯的可能性

总结:正则表达式修炼指南

  • 正则表达式是强大的文本处理工具,但需要时间掌握
  • 从简单模式开始,逐步构建复杂模式
  • 多练习,多实验,才能掌握这门"魔法"
  • 记住:有时候,简单的字符串方法可能更适合简单的任务

“一开始,所有的正则表达式都像天书;熟练后,它们变成了你的得力助手。” – 正则表达式大师的传说

练习题:小试身手

  1. 编写一个正则表达式来验证中国手机号码(11位数字,以1开头)
  2. 从文本中提取所有的URL链接
  3. 验证一个字符串是否为有效的IPv4地址
  4. 从文本中提取所有的"#标签"(Twitter风格)

1.验证中国手机号码

中国手机号码规则:11位数字,以1开头。

import redef validate_chinese_phone(phone_number):"""验证中国手机号码是否有效参数:phone_number: 要验证的手机号码字符串返回:布尔值: 是否为有效的中国手机号码"""# 正则表达式解释:# ^1           - 以1开头# [0-9]{10}    - 后跟10位数字# $            - 结束匹配pattern = r'^1[0-9]{10}$'return bool(re.match(pattern, phone_number))# 测试示例
test_phones = ["13812345678",  # 有效"19912345678",  # 有效"12345678901",  # 有效 (只要求以1开头的11位数字)"138123456789", # 无效 (12位)"2381234567",   # 无效 (10位且不以1开头)"138abcd1234",  # 无效 (包含非数字字符)"01381234567",  # 无效 (12位且不以1开头)"138-1234-567"  # 无效 (包含连字符)
]for phone in test_phones:result = "有效" if validate_chinese_phone(phone) else "无效"print(f"手机号 {phone}{result}的中国手机号")

2. 从文本中提取所有URL链接

提取各种格式的URL链接,包括http、https、ftp等协议。

import redef extract_urls(text):"""从文本中提取所有URL链接参数:text: 要搜索的文本返回:列表: 包含所有找到的URL"""# 正则表达式解释:# (https?|ftp)://                - 匹配协议(http://, https://, ftp://)# [-a-zA-Z0-9@:%._\+~#=]{1,256}  - 匹配域名和路径中的有效字符# \.[a-zA-Z0-9()]{1,6}           - 匹配顶级域名(.com, .org等)# \b                             - 单词边界# ([-a-zA-Z0-9()@:%_\+.~#?&//=]*)- 匹配URL中的参数和路径pattern = r'(https?|ftp)://[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)'# 简化版本,也可以使用这个更简单但覆盖面广的模式# pattern = r'https?://[^\s]+'return re.findall(pattern, text)# 测试示例
test_text = """
这是一个包含多个URL的文本示例:
访问 https://www.example.com 获取更多信息。
下载链接: http://files.example.org/document.pdf
FTP服务器: ftp://ftp.example.net/downloads/
无效链接: www.not-extracted.com (因为没有协议前缀)
嵌入在文本中的链接https://api.example.com/v1/data?id=123&format=json也会被提取。
"""urls = extract_urls(test_text)
print("提取的URL:")
for i, url in enumerate(urls, 1):print(f"{i}. {url[0]}{url[1]}")  # 合并捕获组

3. 验证IPv4地址

验证一个字符串是否为有效的IPv4地址(四个0-255之间的数字,用点分隔)。

import redef validate_ipv4(ip_address):"""验证一个字符串是否为有效的IPv4地址参数:ip_address: 要验证的IP地址字符串返回:布尔值: 是否为有效的IPv4地址"""# 正则表达式解释:# ^                         - 开始匹配# (25[0-5]|2[0-4][0-9]|     - 匹配250-255或200-249#  [01]?[0-9][0-9]?|        - 匹配0-199#  [0-9])                   - 匹配单个数字0-9# \.                        - 匹配点号(.)# 重复上述模式三次,最后一次不带点号# $                         - 结束匹配pattern = r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$'return bool(re.match(pattern, ip_address))# 测试示例
test_ips = ["192.168.1.1",    # 有效"10.0.0.1",       # 有效"172.16.254.1",   # 有效"255.255.255.255",# 有效"0.0.0.0",        # 有效"256.0.0.1",      # 无效 (256超出范围)"192.168.1",      # 无效 (只有3段)"192.168.1.1.1",  # 无效 (有5段)"192.168.1.a",    # 无效 (包含非数字字符)"192.168.01.1"    # 有效 (前导零被允许)
]for ip in test_ips:result = "有效" if validate_ipv4(ip) else "无效"print(f"IP地址 {ip}{result}的IPv4地址")

4. 提取Twitter风格的标签

从文本中提取所有的"#标签"(Twitter风格)。

import redef extract_hashtags(text):"""从文本中提取所有的Twitter风格标签(#标签)参数:text: 要搜索的文本返回:列表: 包含所有找到的标签(不含#符号)"""# 正则表达式解释:# #                   - 匹配#符号# ([a-zA-Z0-9_\u4e00-\u9fa5]+) - 匹配标签内容:#   [a-zA-Z0-9_]     - 英文字母、数字和下划线#   \u4e00-\u9fa5    - 中文字符范围pattern = r'#([a-zA-Z0-9_\u4e00-\u9fa5]+)'return re.findall(pattern, text)# 测试示例
test_text = """
今天的天气真不错 #天气 #晴天
我正在学习Python #Python #编程 #学习
这是一个#复合标签 和一个 #带有标点符号的标签!
#中英文混合tag #123数字 #with_underscore
"""hashtags = extract_hashtags(test_text)
print("提取的标签:")
for i, tag in enumerate(hashtags, 1):print(f"{i}. {tag}")

综合示例应用

下面是一个综合应用,将上面的所有函数整合到一个文本分析工具中:

import reclass TextAnalyzer:"""文本分析工具,提供多种正则表达式功能"""@staticmethoddef validate_chinese_phone(phone_number):pattern = r'^1[0-9]{10}$'return bool(re.match(pattern, phone_number))@staticmethoddef extract_urls(text):pattern = r'(https?|ftp)://[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)'matches = re.findall(pattern, text)return [f"{protocol}{path}" for protocol, path in matches]@staticmethoddef validate_ipv4(ip_address):pattern = r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$'return bool(re.match(pattern, ip_address))@staticmethoddef extract_hashtags(text):pattern = r'#([a-zA-Z0-9_\u4e00-\u9fa5]+)'return re.findall(pattern, text)@staticmethoddef analyze_text(text):"""分析文本,提取所有可能的信息"""result = {"phones": [],"urls": [],"ips": [],"hashtags": []}# 提取手机号phone_pattern = r'1[0-9]{10}'phones = re.findall(phone_pattern, text)result["phones"] = [p for p in phones if TextAnalyzer.validate_chinese_phone(p)]# 提取URLresult["urls"] = TextAnalyzer.extract_urls(text)# 提取IP地址ip_pattern = r'\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b'potential_ips = re.findall(ip_pattern, text)result["ips"] = [ip for ip in potential_ips if TextAnalyzer.validate_ipv4(ip)]# 提取标签result["hashtags"] = TextAnalyzer.extract_hashtags(text)return result# 测试综合分析
sample_text = """
联系我: 13812345678 或 19987654321
网站: https://www.example.com/path?query=123
服务器IP: 192.168.1.1 和 8.8.8.8 (但 999.999.999.999 不是有效IP)
话题: #Python #正则表达式 #数据分析
"""analyzer = TextAnalyzer()
analysis_result = analyzer.analyze_text(sample_text)print("文本分析结果:")
print(f"手机号: {analysis_result['phones']}")
print(f"URL链接: {analysis_result['urls']}")
print(f"IP地址: {analysis_result['ips']}")
print(f"话题标签: {analysis_result['hashtags']}")

这些正则表达式示例展示了如何使用Python处理各种文本模式匹配任务。您可以根据具体需求进一步调整这些模式,使它们更加精确或更适合您的用例。

记住:正则表达式就像厨艺,多练习才能精通。每解决一个文本处理问题,你就离正则表达式大师更近一步!

相关文章:

Python3正则表达式:字符串魔法师的指南[特殊字符]‍♂️

Python3正则表达式 什么是正则表达式&#xff1f;在Python中使用正则表达式一、正则表达式基础语法&#xff1a;你的魔法咒语基本匹配符字符类&#xff1a;性格各异的字符们预定义字符类&#xff1a;常见角色的快捷方式重复限定符&#xff1a;贪婪的收集者贪婪vs非贪婪&#xf…...

k8s术语之CronJob

CronJob管理基于时间的Job&#xff0c;即&#xff1a; 在给定时间点只运行一次 周期性地在给定时间点运行 一个CronJob对象类似于crontab文件中的一行。它根据指定的预定计划周期地运行一个Job,格式可以参考Cron 前提条件 当前使用地Kubernetes集群&#xff0c;版本>1.8.对…...

常见的提示词攻击方法 和防御手段——提示词注入(Prompt Injection)攻击解析

提示词注入&#xff08;Prompt Injection&#xff09;攻击解析 提示词注入是一种针对大型语言模型&#xff08;LLM&#xff09;的新型攻击手段&#xff0c;攻击者通过精心设计的输入文本&#xff08;提示词&#xff09;操控AI模型的输出&#xff0c;使其执行非预期行为或泄露敏…...

软件逆向工程核心技术:脱壳原理与实战分析

目录 一、脱壳技术概述&#xff1a;从保护到还原的逆向之旅 1.1 脱壳技术的本质与核心价值 1.2 壳的分类与核心技术解析 1.3 学习路径&#xff1a;从压缩壳到加密壳的渐进式突破 二、脱壳三步法&#xff1a;系统化逆向工程框架 2.1 核心流程总览 2.2 实战案例&#xff1…...

C27-简单选择排序法

一 基本思想 每轮从待排序序列中选出最小或最大的元素,与待排序区间起始位置交换,逐步缩小待排序区间 二 算法实现 遍历数组:设数组长度为n,外层循环i从0到n-2(共n-1轮) 找最小值下标:内层循环j从i1到n-1,遍历待排序区间(i到n-1),记录找最小值下标min 交换元素:将arr[i]与a…...

【Redis】持久化与事务

文章目录 1. 持久化1.1 RDB(定期)1.1.1 触发方式1.1.2 触发流程 1.2. AOF(实时)1.2.1 设置AOF1.2.2 刷新策略1.2.3 重写机制 2. 事务2.1 redis事务概念2.2 事务操作 Mysql有几个特性&#xff1a; 原子性一致性隔离性&#xff0c;redis是串行的&#xff0c;自带隔离性持久性&…...

Web 自动化之 HTML JavaScript 详解

文章目录 一、HTML 常用标签二、javascript 脚本1、什么是 javascript(js)2、 js变量和函数3、js 弹窗处理4、js 流程控制语句和 switch 结构语句应用 一、HTML 常用标签 HTML&#xff1a;超文本标记语言 超文本&#xff1a;不仅只包含文字&#xff0c;还有超链接、视频…这些…...

【JavaScript】二十九、垃圾回收 + 闭包 + 变量提升

文章目录 1、作用域1.1 局部作用域1.2 全局作用域1.3 作用域链 2、JC垃圾回收机制♻️3、GC算法3.1 引用计数法3.2 标记清除法 4、闭包4.1 定义4.2 闭包的应用&#xff1a;实现数据的私有 5、变量提升 1、作用域 即一个范围&#xff0c;离开了这个范围&#xff0c;这个变量就不…...

Python在自动驾驶实时数据处理中的应用:让AI驾驶更智能、更高效

Python在自动驾驶实时数据处理中的应用:让AI驾驶更智能、更高效 近年来,自动驾驶技术的飞速发展离不开人工智能和数据处理的支撑,而Python作为AI与数据分析的核心编程语言,在自动驾驶实时数据处理方面扮演着不可或缺的角色。从传感器数据解析,到路径规划与决策优化,再到…...

功能安全的关键——MCU锁步核技术全解析(含真实应用方案)

随着智能汽车的发展&#xff0c;整车对功能安全的要求越来越高。特别是像电动助力转向&#xff08;EPS&#xff09;、制动控制系统、气囊控制器这类对“出错零容忍”的系统&#xff0c;已经广泛采用一种重要的安全架构——锁步核&#xff08;Lockstep Core&#xff09;。 今天我…...

Java实现桶排序算法

1. 桶排序原理图解 桶排序是一种基于分桶思想的非比较排序算法&#xff0c;适用于数据分布较为均匀的场景。其核心思想是将数据分散到有限数量的“桶”中&#xff0c;每个桶再分别进行排序&#xff08;通常使用插入排序或其他简单的排序算法&#xff09;。以下是桶排序的步骤&a…...

剖析 FFmpeg:从基本功能到过滤器,实现音视频处理的灵活性

目录 1.解复用2 解码2.1 音频解码2.2 视频解码 3 修饰3.1 avio3.2 重采样 4 过滤器4.1 过滤器基本知识4.2 简单过滤器4.3 复杂滤镜图 1.解复用 解复用就是把容器中的媒体流分离出来&#xff0c;方便我们对媒体流处理。 step1&#xff1a;对媒体文件上下文初始化 AVFormatCont…...

maven如何搭建自己的私服(LINUX版)?

环境准备 安装 JDK &#xff1a;确保系统已安装 JDK 8 或更高版本。可以通过以下命令安装 JDK&#xff1a; 安装 OpenJDK &#xff1a;sudo apt update && sudo apt install openjdk-11-jdk 安装 Oracle JDK &#xff1a;需要添加第三方仓库&#xff0c;例如 WebUpd8 …...

机器视觉的手机FPC油墨丝印应用

在现代智能手机制造过程中&#xff0c;精密的组件装配和质量控制是确保产品性能和用户体验的关键。其中&#xff0c;柔性印刷电路板&#xff08;FPC&#xff09;的油墨丝印工艺尤为关键&#xff0c;它不仅影响到电路板的美观&#xff0c;更直接关系到电路的导电性能和可靠性。而…...

AI原生手机:三大技术阵营的终极对决与未来展望

引言&#xff1a;AI手机时代的真正到来 2024年&#xff0c;智能手机行业迎来了一个历史性转折点——AI原生手机从概念走向主流。根据IDC最新报告&#xff0c;中国AI手机出货量同比激增591%&#xff0c;渗透率从2023年的3%飙升至22%。这一数据背后&#xff0c;是手机厂商在硬件…...

CFCA受邀参加盛京银行手机银行7.0发布会

4月30日&#xff0c;盛京银行举办手机银行7.0发布会。 盛京银行手机银行7.0围绕“慧享生活&#xff0c;财富随行”主题&#xff0c;聚焦便捷体验、财富管理、惠民生活&#xff0c;构建12大类服务&#xff0c;升级142项功能&#xff0c;全新设置信用卡频道&#xff0c;推出“云…...

IT/OT 融合架构下的工业控制系统安全攻防实战研究

1. 引言 随着工业 4.0 和智能制造的浪潮席卷全球&#xff0c;信息技术 (IT) 与运营技术 (OT) 的融合已成为不可逆转的趋势。这种融合旨在通过实时数据交换和分析&#xff0c;打破传统的信息孤岛&#xff0c;显著提升生产效率、优化决策、降低运营成本并增强市场竞争力。IT 系统…...

AI优化高频PCB信号完整性:猎板PCB的技术突破与应用实践

随着5G通信、AI服务器及新能源汽车的快速发展&#xff0c;高频PCB的信号完整性已成为决定电子产品性能的关键。本文以猎板PCB的技术实践为例&#xff0c;解析如何通过AI算法与精密制造工艺的结合&#xff0c;实现高频信号传输的极致优化&#xff0c;为行业提供高可靠性的解决方…...

【Bluedroid】蓝牙 SDP(服务发现协议)模块代码解析与流程梳理

本文深入剖析Bluedroid蓝牙协议栈中 SDP&#xff08;服务发现协议&#xff09;服务记录的全生命周期管理流程&#xff0c;涵盖初始化、记录创建、服务搜索、记录删除等核心环节。通过解析代码逻辑与数据结构&#xff0c;揭示各模块间的协作机制&#xff0c;包括线程安全设计、回…...

obj = null; 赋值null之前没有其他引用指向obj对象,那么,当obj=null时,会被垃圾回收机制立即回收吗?

不会立即回收。 具体原因是&#xff1a; 赋值 obj null; 后&#xff0c;对象变成“不可达”&#xff0c;符合垃圾回收条件&#xff0c;但垃圾回收器并不会立刻回收它。垃圾回收是CLR自动控制的非确定性过程&#xff0c;什么时候执行回收取决于系统内存压力、GC策略、分代情况…...

Android 数据持久化之 文件存储

在 Android 开发中&#xff0c;存储文件是一个常见的需求。 本文中介绍 openFileOutput 和 File 两种不同的方式来操作文件。 一、File 方式 根据文件的存储位置和访问权限&#xff0c;可以将文件存储分为内部存储&#xff08;Internal Storage&#xff09;和外部存储&#x…...

差分OPA verilogaA 模型

做电路设计&#xff0c;需要提前用理想模型如VerilogA模型做验证。这里分享一个由ahdlib库里单端opamp改造而来的差分opamp。参考何乐年的《模拟集成电路设计与仿真》10.4节423页&#xff1b; 描述的小信号模型如上。 VerilogA 用到了SRI/C&#xff0c;GBWgm/C,gaingm*r1等概念…...

oracle goldengate非并行进程转换为并行进程

oracle goldengate非并行进程转换为并行进程 在上一期的文章中写道了直接创建并行进程的方式对大事务进行分解&#xff0c;这对于新建立同步进程的时候提前规划是很有帮助的&#xff0c;但是如果对已经进行了同步的进程重新建立需要耗时比较长&#xff0c;Oracle提供了非并行进…...

58.[前端开发-前端工程化]Day05-webpack-Git安装-配置-Git命令

Git版本控制工具详解 1 邂逅版本控制工具 认识版本控制&#xff08;版本控制&#xff09; 版本控制的功能 版本控制的历史 2 集中式和分布式区别 集中式版本控制 分布式版本控制 3 Git的环境安装搭建 Git的安装 Bash – CMD – GUI 区别 Git的配置分类 Git的配置选项 Git的…...

CF每日5题

每日刷题两小时颐养天年 1855A 800 思维 将不高兴的同学计数cnt 不高兴的同学之间两两交换&#xff0c;一定不会在 p i i p_ii pi​i的位置上&#xff0c;贡献是cnt/2 如果cnt%2>0&#xff0c;那就多交换一次 void solve() {int n;cin>>n;int cnt0;forr(i,1,n){in…...

Redis实现分布式获取全局唯一自增ID的案例。

【1】简易自增版本(从 1 开始 1,2,3&#xff0c;...) 项目结构 下面是一个基于 RedisTemplate 实现的分布式全局唯一自增 ID 生成器的案例。适用于 Java Spring Boot 环境&#xff0c;利用 Redis 的原子操作 INCR 指令。 ✅ 原理说明 Redis 提供的 INCR 命令是原子性的&…...

创建型模式:工厂方法(Factory Method)模式

一、简介 工厂方法(Factory Method)模式是一种创建型设计模式,它定义了一个创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。在 C# 中,工厂方法模式提供了一种更灵活的对象创建方式,将对象的创建和使用分离,提高了代码的可维护性和…...

大型语言模型在网络安全领域的应用综述

大型语言模型在网络安全领域的应用综述 简介1. 引言1.1 背景与意义1.2 LLMs 的基本概念1.3 LLMs 在网络安全中的优势1.4 报告目标 2. 文献综述方法2.1 研究问题2.2 文献检索策略2.3 文献筛选标准 3. LLMs 在网络安全领域的应用3.1 软件和系统安全 (Software and System Securit…...

TDEngine 与 Grafana

目录 实践目录 Grafana 参考文档 实践目录 10.60.100.194&#xff1a;/home/dualven/tdengine Grafana systemctl status grafana-server http://10.60.100.194:3000/ 这个端口与mydoor的new server服务冲突 &#xff08;同时只开一个&#xff09; 参考文档 运行监…...

iPhone手机连接WiFi异常解决方法

iPhone手机连接WiFi异常解决方法 一、问题现象二、iPhone连不上可能的原因三、基础排查与快速修复第一步:重启大法第二步:忽略网络,重新认证第三步:关闭“私有无线局域网地址”第四步:修改DNS服务器第五步:还原网络设置四、路由器端排查及设置关闭MAC地址过滤或添加到白名…...

微服务不注册到nacos的方法

引言:在开发中,有时候多个开发一起开发,可能会同时注册到dev环境中,这样可能会影响dev环境,那么在idea添加2个参数即可解决 spring.cloud.nacos.discovery.register-enabled falsespring.cloud.nacos.discovery.enabled false...

Spring Boot + Vue 实现在线视频教育平台

一、项目技术选型 前端技术&#xff1a; HTML CSS JavaScript Vue.js 前端框架 后端技术&#xff1a; Spring Boot 轻量级后端框架 MyBatis 持久层框架 数据库&#xff1a; MySQL 5.x / 8.0 开发环境&#xff1a; IDE&#xff1a;Eclipse / IntelliJ IDEA JDK&…...

【嵌入式开发-SPI】

嵌入式开发-SPI ■ SPI简介■ SPI &#xff08;Standard SPI&#xff09;■ DSPI &#xff08;Dual SPI&#xff09;■ QSPI是 Queued SPI的简写 ■ SPI简介 SPI协议其实是包括&#xff1a;Standard SPI、Dual SPI和Queued SPI三种协议接口&#xff0c;分别对应3-wire, 4-wire…...

【链表扫盲】FROM GPT

链表是一种线性数据结构&#xff0c;由节点&#xff08;Node&#xff09;组成&#xff0c;每个节点包含两个部分&#xff1a; 数据域&#xff08;data&#xff09;&#xff1a; 存储节点值。指针域&#xff08;next&#xff09;&#xff1a; 存储指向下一个节点的引用。 链表…...

如何在macOS上通过SSHFS挂载远程文件系统

在macOS系统中&#xff0c;想要便捷地访问远程计算机上的目录&#xff1f;借助SSH文件系统&#xff08;SSHFS&#xff09;就能轻松实现。SSHFS是一款文件系统客户端&#xff0c;它基于SSH文件传输协议&#xff08;SFTP&#xff09;建立安全连接&#xff0c;进而实现对远程文件的…...

Android studio profiler使用

主要讲内存泄露排查 1、把怀疑内存泄露的页面都跑一边&#xff0c;然后回到初始页面 2、打开profile的home&#xff0c;找到Analysis Memory Usage&#xff0c;点击右下角start profiler task&#xff0c;开始分析内存&#xff0c;等待分析完成&#xff0c;分析过程中页面是卡…...

排序算法-选择排序

选择排序是一种简单直观的排序算法&#xff0c;其核心思想是每次从未排序的部分中选出最小&#xff08;或最大&#xff09;的元素&#xff0c;放到已排序部分的末尾。 选择排序步骤 初始化&#xff1a;将序列分为已排序部分&#xff08;初始为空&#xff09;和未排序部分&…...

云计算的基础概论

一、云计算基础概念 1. 云计算定义 • 英文&#xff1a;Cloud Computing • 定义&#xff1a;通过互联网&#xff08;Internet&#xff09;按需提供可扩展的计算资源&#xff08;如服务器、存储、数据库、网络、软件等&#xff09;&#xff0c;用户无需管理底层基础设施。 …...

仿LISP运算 - 华为OD机试真题(A卷、JavaScript题解)

华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 针对刷题难&#xff0c;效率慢&#xff0c;我们提供一对一算法辅导&#xff0c; 针对个人情况定制化的提高计划&#xff08;全称1V1效率更高&#xff09;。 看…...

数据透视表控件DHTMLX Pivot v2.1发布,新增HTML 模板、增强样式等多个功能

DHTMLX Pivot数据透视表能快速地对数据进行计数、总计、平均和执行许多其他操作。近日&#xff0c;DHTMLX Pivot发布了2.1版本&#xff0c;该版本扩展了开发人员通过新增的 CSS 样式选项、HTML 模板以及数字和日期的自定义格式修改表格外观的能力。此外&#xff0c;该版本还增加…...

简易的考试系统设计(Web实验)

简易的考试系统设计&#xff08;Web实验&#xff09; 1.实验内容与设计思想&#xff08;一&#xff09;实验需求&#xff08;二&#xff09;设计思路 2.代码展示3.实验小结 1.实验内容与设计思想 &#xff08;一&#xff09;实验需求 1.编写两个页面程序&#xff0c;一个HTML…...

C++之set和map的运用

目录 序列式容器和关联式容器 熟识set 在STL中的底层结构&#xff1a; set的构造和迭代器 set的增删查 multiset和set的差异 练习题&#xff1a; 熟识map map类的介绍 pair类型介绍 map的构造 map的增删查 map的数据修改 测试样例&#xff1a; multimap和map的差…...

基于智能家居项目 RGB彩灯(P9813)

一、P9813 是什么&#xff1f; P9813 是一颗专门用来控制 RGB LED灯珠 的芯片&#xff0c;也就是说&#xff0c;它能控制红色、绿色、蓝色三种灯光的亮度&#xff0c;从而调出各种颜色。它最常见的用途就是在各种“会变色”的灯带中。 它的通信方式非常简单&#xff0c;只需要…...

EMQX 作为 MQTT Broker,支持 ​MQTT over TCP​ 和 ​MQTT over WebSocket​ 两种协议

1. EMQX 支持的协议与端口​ 协议类型默认端口用途说明​MQTT over TCP​1883标准的 MQTT 协议&#xff0c;基于 TCP 传输&#xff08;用于后端服务、物联网设备等&#xff09;。​MQTT over TLS​8883加密的 MQTT over TCP&#xff08;TLS/SSL 加密&#xff0c;安全性更高&am…...

软件测试学习笔记

第1章 绪论 软件测试 本质上说&#xff0c;就是寻找软件的缺陷、错误&#xff0c;对其质量度量的方法与过程。软件测试的一切活动都围绕着两个目标&#xff08;验证是否符合需求&#xff0c;识别差异&#xff09;而行进。它是测试思维、策略方针、设计实施的基本出发点。 学…...

Vue3 + Node.js 实现客服实时聊天系统(WebSocket + Socket.IO 详解)

Node.js 实现客服实时聊天系统&#xff08;WebSocket Socket.IO 详解&#xff09; 一、为什么选择 WebSocket&#xff1f; 想象一下淘宝客服的聊天窗口&#xff1a;你发消息&#xff0c;客服立刻就能看到并回复。这种即时通讯效果是如何实现的呢&#xff1f;我们使用 Vue3 作…...

python 上海新闻爬虫

1. 起因&#xff0c; 目的: 继续做新闻爬虫。我之前写过。此文先记录2个新闻来源。后面打算进行过滤&#xff0c;比如只选出某一个类型新闻。 2. 先看效果 过滤出某种类型的新闻&#xff0c;然后生成 html 页面&#xff0c;而且&#xff0c;自动打开这个页面。 比如科技犯罪…...

【Axure高保真原型】中继器表格批量上传数据

今天和大家分享中继器表格批量上传数据的原型模板&#xff0c;效果包括&#xff1a; 点击上传按钮&#xff0c;可以真实的打开本地文件夹选择文件&#xff1b; 选择的文件如果不是表格格式&#xff08;xls、xlsx、xlt、csv&#xff09;&#xff0c;就会显示提示弹窗&#xff1…...

复刻低成本机械臂 SO-ARM100 单关节控制(附代码)

视频讲解&#xff1a; 复刻低成本机械臂 SO-ARM100 单关节控制&#xff08;附代码&#xff09; 代码仓库&#xff1a;GitHub - LitchiCheng/SO-ARM100: Some Test code on SO-ARM100 昨天用bambot的web的方式调试了整个机械臂&#xff0c;对于后面的仿真的sim2real来说&#x…...

视频编解码学习7之视频编码简介

视频编码技术发展历程与主流编码标准详解 视频编码技术是现代数字媒体领域的核心技术之一&#xff0c;它通过高效的压缩算法大幅减少了视频数据的体积&#xff0c;使得视频的存储、传输和播放变得更加高效和经济。从早期的H.261标准到最新的AV1和H.266/VVC&#xff0c;视频编码…...