掌握re.UNICODE和re.ASCII标志位差异,彻底搞懂Python正则的编码匹配行为

第一章:Python正则表达式中的Unicode匹配概述

在国际化应用日益普及的今天,文本处理常常涉及多语言字符集,包括中文、日文、阿拉伯文以及表情符号等。Python 的正则表达式模块 `re` 提供了对 Unicode 的原生支持,使得开发者能够精确地匹配和操作包含 Unicode 字符的字符串。

启用 Unicode 匹配

在 Python 的 `re` 模块中,默认情况下,某些字符类(如 `\w`、`\d`、`\s`)的行为依赖于是否启用 Unicode 模式。通过指定 `re.UNICODE` 标志(或 `re.U`),可以确保这些元字符按照 Unicode 字符属性进行匹配。
# 启用 Unicode 模式匹配中文字符
import re

text = "Hello 世界!"
pattern = r'\w+'  # 匹配单词字符
matches = re.findall(pattern, text, re.U)

print(matches)  # 输出: ['Hello', '世界']
上述代码中,`re.U` 确保 `\w` 不仅匹配 ASCII 字母,还能识别中文字符“世界”。

Unicode 字符属性匹配

Python 正则表达式允许使用 Unicode 通用类别来匹配特定类型的字符。例如,`\p{L}` 表示任意字母字符,`\p{Nd}` 表示数字字符。虽然标准 `re` 模块不支持 `\p{}` 语法,但第三方库 `regex` 提供了完整支持。
  1. 安装扩展库:pip install regex
  2. 使用 Unicode 属性进行高级匹配
# 使用 regex 库匹配所有汉字
import regex as re

text = "Python编程很有趣!"
pattern = r'\p{Han}+'  # 匹配连续的汉字
matches = re.findall(pattern, text)

print(matches)  # 输出: ['编程', '很有趣']
Unicode 类别含义
\p{L}任意字母
\p{Nd}十进制数字
\p{P}标点符号
\p{Sm}数学符号
正确理解和使用 Unicode 匹配机制,是构建鲁棒文本处理系统的关键基础。

第二章:re.UNICODE与re.ASCII标志位的底层机制

2.1 理解re.UNICODE标志位的作用原理

在Python正则表达式中,`re.UNICODE`是一个重要的标志位,用于控制字符类(如`\w`、`\d`、`\s`)的匹配行为是否遵循Unicode标准。
作用机制
当启用`re.UNICODE`时,正则引擎会根据Unicode字符属性来识别字符类别。例如,`\w`不仅匹配ASCII字母数字,还包括中文、阿拉伯文等Unicode定义的“词字符”。

import re

text = "Hello 世界"
pattern = r'\w+'
result = re.findall(pattern, text, re.UNICODE)
print(result)  # 输出: ['Hello', '世界']
上述代码中,`re.UNICODE`确保`\w+`能正确匹配包含非ASCII字符的单词。若未启用该标志,在旧版本Python中可能仅匹配ASCII部分。
默认行为变化
从Python 3开始,`re.UNICODE`默认启用,所有字符串均为Unicode类型,因此该标志在多数场景下可省略。但在处理跨版本兼容或明确指定行为时仍具意义。

2.2 解析re.ASCII如何限制字符类匹配行为

在Python的正则表达式中,re.ASCII标志用于限定字符类(如\w、\d、\s)仅匹配ASCII编码范围内的字符,忽略Unicode字符集中的扩展匹配。
默认行为 vs ASCII模式
默认情况下,\w可匹配Unicode字母(如中文、拉丁字符),启用re.ASCII后仅限a–z、A–Z、0–9和下划线。

import re

# 默认模式:匹配Unicode字符
match1 = re.match(r'\w+', 'café')  # 匹配 'café'

# 启用ASCII模式:仅匹配ASCII字符
match2 = re.match(r'\w+', 'café', re.ASCII)  # 仅匹配 'ca'
上述代码中,re.ASCII限制了\w+的行为,使其在遇到非ASCII字符'é'时终止匹配。这一机制在处理纯英文文本或需避免多语言干扰的场景中尤为关键。
适用场景对比
  • 国际化应用:应禁用re.ASCII以支持多语言
  • 协议解析、日志过滤:建议启用以确保一致性

2.3 Unicode与ASCII模式下元字符的差异分析

在正则表达式处理中,Unicode与ASCII模式对元字符的解析存在显著差异。默认情况下,多数正则引擎以ASCII模式运行,此时元字符如 \w、\d、\s 仅匹配ASCII字符集中的字母、数字和空白。
元字符行为对比
  • \w 在ASCII模式下仅匹配 a–z、A–Z、0–9 和下划线;在Unicode模式下可匹配中文、阿拉伯文等广义字母。
  • \d 在ASCII中仅识别0–9,在Unicode中可匹配全角数字(如“4”)。
代码示例

import re

text = "Hello 世界"
# ASCII模式
match_ascii = re.findall(r'\w+', text, re.ASCII)
print(match_ascii)  # 输出: ['Hello']

# Unicode模式(默认)
match_unicode = re.findall(r'\w+', text)
print(match_unicode)  # 输出: ['Hello', '世界']
上述代码中,re.ASCII 强制限制元字符为ASCII范围,而默认模式支持Unicode标识符,体现模式切换对匹配结果的根本影响。

2.4 字符类别(如\w、\d)在两种模式下的实际表现对比

在正则表达式中,字符类别如 `\w` 和 `\d` 在“基本正则表达式”(BRE)与“扩展正则表达式”(ERE)中的行为存在差异。
元字符支持差异
  • \d 在 ERE 中普遍支持,匹配任意数字;但在部分 BRE 实现中需写为 [0-9]
  • \w 在 ERE 中等价于 [a-zA-Z0-9_],而 BRE 需启用扩展语法或转义使用
代码示例对比
# ERE 模式下:
\d+     # 匹配一个或多个数字
\w+     # 匹配单词字符

# BRE 模式下可能需写作:
[0-9]\+ # 数字匹配,+ 需转义
[a-zA-Z0-9_]\+ # 等效 \w+
上述写法体现 BRE 对元字符的严格转义要求,而 ERE 更贴近现代开发习惯。

2.5 Python版本变迁中默认编码行为的演进

Python 在不同版本中对文本编码的处理经历了显著变化,尤其体现在默认编码策略上。早期版本如 Python 2.x 使用 ASCII 作为默认编码,导致处理非英文字符时频繁出现 UnicodeDecodeError。
Python 2 与 Python 3 的关键差异
  • Python 2 默认使用 ASCII 编码,字符串类型为字节串(str)
  • Python 3 默认使用 UTF-8 编码,原生支持 Unicode,字符串类型为 str(即 Unicode 字符串)
代码行为对比
# Python 2 中需显式声明编码
# -*- coding: utf-8 -*-
text = "中文"
print type(text)  # <type 'str'>

# Python 3 中默认支持 UTF-8
text = "中文"
print(type(text))  # <class 'str'>,实际为 Unicode
上述代码表明,Python 3 在源码层面原生支持 UTF-8,无需额外声明,极大简化了国际化开发。
默认编码查询方式
版本查询方法输出结果
Python 2.7sys.getdefaultencoding()ascii
Python 3.10+sys.getdefaultencoding()utf-8

第三章:Unicode匹配中的字符类与边界问题

3.1 \w、\W、\b等字符类在非ASCII文本中的匹配陷阱

正则表达式中的 \w、\W 和 \b 在处理非ASCII文本时可能产生意料之外的行为,尤其在多语言环境下。
字符类的默认行为
多数正则引擎中,\w 仅匹配 ASCII 字符集中的字母、数字和下划线(即 [a-zA-Z0-9_]),不包含如 é、ü、汉字等 Unicode 字符。
\w+
该模式在字符串 "café" 中仅匹配 "caf",忽略带重音的 "é"。
Unicode 感知模式的重要性
启用 Unicode 模式后,\w 可正确识别各类语言中的单词字符。例如在 Python 中使用 re.UNICODE 或 re.ASCII 明确控制行为:
import re
text = "你好_world"
print(re.findall(r'\w+', text, re.UNICODE))  # 输出: ['你好_world']
此代码启用 Unicode 支持,确保中文字符被包含在 \w+ 匹配中。
常见陷阱对比
模式输入 "café"输入 "北京"
\w+ (ASCII)caf无匹配
\w+ (Unicode)café北京

3.2 多语言文本处理中常见的正则匹配错误案例

在处理多语言文本时,开发者常因忽略字符编码和语言特性而引发正则表达式匹配异常。尤其在混合使用拉丁字母与非ASCII字符(如中文、阿拉伯文)时,问题尤为突出。
忽略Unicode标志导致匹配失败
JavaScript等语言中的正则引擎默认不启用Unicode支持,导致无法正确识别多字节字符:

// 错误写法:未启用Unicode模式
/^\w+$/.test("你好"); // false,\w仅匹配[a-zA-Z0-9_]

// 正确写法:使用u修饰符
/^\p{L}+$/u.test("你好"); // true,\p{L}匹配任意语言字母
上述代码中,u 标志启用Unicode模式,\p{L} 可匹配任何语言的字母字符,避免漏判非拉丁文本。
常见错误场景汇总
  • 使用.匹配任意字符,但未设置s标志,导致换行符中断匹配
  • 未考虑阿拉伯语从右到左的书写方向,造成位置断言错乱
  • 过度依赖\s处理空白符,忽略全角空格等Unicode空白字符

3.3 如何正确使用标志位确保跨语言兼容性

在跨语言系统交互中,标志位(Flag)常用于控制行为开关或状态传递。为确保兼容性,应统一采用基础数据类型(如布尔值或整型)表示标志位,并避免依赖语言特有的枚举实现。
使用整型标志位进行状态编码
通过预定义整数值表示状态,可提升多语言解析一致性:

const (
    StatusPending = 0
    StatusSuccess = 1
    StatusFailed  = 2
)
上述代码定义了通用状态码,Python、Java等语言均可映射相同数值,避免语义歧义。
跨语言通信中的标志约定
  • 始终使用小写命名以兼容大小写敏感语言
  • 在接口文档中明确定义每个标志的取值与含义
  • 保留预留值(如-1、99)用于未来扩展

第四章:典型应用场景与最佳实践

4.1 处理中文、日文等东亚文字的正则匹配策略

在处理中文、日文等东亚文字时,传统正则表达式常因字符编码和Unicode属性识别不足而失效。现代正则引擎支持Unicode类别匹配,可通过预定义字符类精准定位文字范围。
Unicode字符类匹配
使用\p{L}可匹配任意语言的字母字符,结合具体脚本类别提升精度:

\p{Script=Han}+     # 匹配连续的汉字
\p{Script=Hiragana}+ # 匹配平假名
\p{Script=Katakana}+ # 匹配片假名
[\p{Han}\p{Hiragana}\p{Katakana}]+ # 混合日文文本匹配
上述模式依赖支持Unicode属性的引擎(如Perl、Python的regex库而非re)。其中Script属性区分书写系统,确保不误匹配拉丁字母或数字。
常见匹配场景示例
  • 提取纯中文字符串:^[\p{Script=Han}]+$
  • 验证含日文混合内容:[\p{L}\p{N}・【】()]+
  • 排除标点干扰:使用\P{P}跳过所有Unicode标点符号

4.2 验证国际化域名与邮箱地址的编码注意事项

在处理包含非ASCII字符的国际化域名(IDN)和邮箱地址时,必须采用Punycode编码将其转换为ASCII兼容格式。现代应用需确保底层库支持RFC 5890规范。
编码转换示例
// 将国际化域名转换为Punycode
package main

import (
    "golang.org/x/net/idna"
)

func main() {
    encoded, _ := idna.ToASCII("例子.测试") // 输出: xn--fsq.xn--0zwm56d
    println(encoded)
}
该代码使用Go语言的idna包将中文域名转为Punycode,适用于DNS解析前的预处理。
常见验证规则
  • 域名部分必须通过ToASCII转换且长度不超过253字符
  • 邮箱本地部分保留Unicode,但域名部分必须Punycode化
  • 验证应区分大小写敏感性,存储时建议统一小写

4.3 在爬虫开发中应对混合编码文本的正则设计

在爬虫抓取过程中,常遇到网页内容包含混合编码(如UTF-8、GBK、Unicode转义)的文本,直接使用常规正则表达式易导致匹配失败或乱码。
编码统一预处理
建议在正则匹配前先将文本标准化为统一编码。Python中可借助`chardet`检测编码,并转换为UTF-8:
import chardet
def normalize_text(text):
    result = chardet.detect(text)
    encoding = result['encoding']
    return text.decode(encoding).encode('utf-8')
该函数自动识别字节流编码并转为UTF-8,提升后续正则匹配稳定性。
正则模式设计技巧
针对混合Unicode转义字符,应使用灵活模式匹配中文、英文及转义序列:
  • 匹配中文字符:[\u4e00-\u9fff]
  • 匹配Unicode转义:\\u[0-9a-fA-F]{4}
  • 组合模式示例:
    [\\u4e00-\\u9fff]+|\\\\u[0-9a-fA-F]{4}
通过组合字符集与转义序列,可覆盖多编码混杂场景。

4.4 性能对比:启用UNICODE是否带来额外开销

启用UNICODE编码确实可能引入一定的运行时开销,主要体现在内存占用和字符串处理效率上。现代操作系统和编译器通过优化机制大幅缓解了此类影响。
内存与处理开销分析
UNICODE字符通常以UTF-16或UTF-8存储,相较于单字节ANSI编码,每个字符可能占用更多字节。例如,在Windows平台上,WCHAR使用UTF-16,每个字符占2或4字节,而传统char仅占1字节。

// ANSI版本
std::string text = "Hello, 世界";
// UNICODE版本
std::wstring wtext = L"Hello, 世界";
上述代码中,wstring的存储空间约为string的两倍。此外,字符串拷贝、比较等操作因数据量增加而略微变慢。
性能测试数据对比
测试项ANSI耗时(μs)UNICODE耗时(μs)
字符串复制(1MB)120135
文本搜索操作8995
尽管存在轻微性能下降,但在多数应用场景中,这种差异可忽略不计。

第五章:彻底掌握Python正则的编码匹配行为

理解默认编码与Unicode匹配
Python正则表达式在处理字符串时,默认使用Unicode模式。这意味着即使未显式启用re.UNICODE标志,\w、\d等元字符也会自动匹配Unicode字符。

import re

# 匹配中文字符
text = "你好World123"
pattern = r'\w+'  # \w 默认匹配中文、字母、数字和下划线
result = re.findall(pattern, text)
print(result)  # 输出: ['你好World123']
字节串与ASCII模式的差异
当使用字节串(bytes)进行匹配时,正则引擎切换为ASCII模式,此时\w仅匹配ASCII字母、数字和下划线。

# 字节串中的匹配
byte_text = b"hello\xc3\xa4world"  # 包含UTF-8编码的ä
pattern = rb'\w+'
result = re.findall(pattern, byte_text)
print(result)  # 输出: [b'hello', b'world'],\xc3\xa4被忽略
控制匹配范围的实用技巧
通过re.ASCII标志可强制str类型也使用ASCII规则,适用于需兼容ASCII环境的场景。
  • 使用re.ASCII限制\w、\s等仅匹配ASCII字符
  • 在国际化文本中,建议显式使用Unicode属性如\p{L}(需regex库支持)
  • 避免混用str与bytes,防止编码错误
常见陷阱与解决方案
问题原因修复方式
无法匹配中文误用字节串或错误编码确保输入为str并使用UTF-8解码
\d匹配全角数字Unicode模式下\d包含全角使用[0-9]限制为ASCII数字
Steam本地manifest解析:Python一键导出游戏清单方案 Steam游戏清单导出本质上是本地元数据提取问题,核心在于绕过不可靠的网页爬虫和受限API,直取客户端自动生成的appmanifest.acf文件——这是一种基于KeyValues格式的权威本地数据源,具备免登录、零风控、高时效、强一致性等技术优势;通过Python解析可实现字段结构化、Unicode兼容(含中文游戏名)、状态标志位解码(如是否已安装)及磁盘占用计算等关键能力,广泛应用于库备份、空间分析、生命周期追踪与自动化运维等工程场景。 阅读详情

相关推荐

多语言RAG实战:避开翻译陷阱的嵌入对齐与混合检索方案

多语言RAG并非简单调用翻译API,其本质是跨语言语义对齐——即让不同语言文本在统一向量空间中准确指向同一现实概念。核心原理在于解决翻译失真、向量空间错位与分词器失能三大问题;技术价值体现在提升专业术语召回率、保障合规场景下的零误判,并支持低资源语言稳健检索;典型应用场景包括金融合规问答、跨境电商知识库与跨国制造维修手册;本文聚焦可落地的语义对齐增强检索(路径C)与混合检索架构,深度融合bge-m3多语言嵌入与BM25关键词鲁棒性,兼顾现有系统兼容性与生产级精度。

weixin_30323631的博客 658

Python正则表达式底层原理与工程避坑指南

正则表达式(RegEx)是文本处理的基础技术,其本质是基于NFA状态机的模式匹配机制。在Python中,re模块并非独立引擎,而是PCRE库的封装,因此性能、回溯行为和边界匹配结果直接受底层C实现影响。理解re.compile()的AST解析与状态图构建过程、group()/span()的指针偏移语义、以及贪婪/懒惰匹配对回溯深度的指数级影响,是实现高性能、低内存消耗文本处理的关键。这些原理支撑着日志清洗、API参数校验、动态关键词搜索等高频工程场景。尤其在金融数据清洗、电商订单解析和实时弹幕过滤等真实项目

weixin_34124651的博客 346

我爬取了某非法网贷后台系统数据,终于知道什么叫做利滚利滚利滚利了

我爬取了非法贷款的后台网站!

weixin_44042821的博客 2880

Python之re模块

一、正则表达式 re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。注意: re模块是python独有的 正则表达式所有编程语言都可以使用 re模块、正则表达式是对字符串进行操作 因为,re模块中的方法大都借助于正则表达式,故先学习正则表达式。 (一)常用正则 1、 字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 正则 待匹配字符

jia666666的博客 774

P450酶催化循环的Amber-Gromacs混合模拟实战:从血红素加氧到产物释放

本文详细介绍了针对P450酶完整催化循环的Amber-Gromacs混合模拟实战策略。通过Amber为关键氧合血红素中间体(CPDI)构建精确力场,再利用Gromacs的高效GPU加速进行长时间尺度动力学模拟,完整覆盖从底物结合到产物释放的催化过程,为研究酶催化机制提供了强大的计算工具。

weixin_29201859的博客 315

本地部署 pyvideotrans(视频翻译配音工具)

语音识别选择faster-whisper(本地),模型选择预先下载并保存的medium,然后选择好要处理的视频以及保存到的位置,这里我选择了一个名为why not的英文演讲视频,保存在桌面_vedio_out文件下。将附件中faster-medium.7z 和 faster-small.7z解压到项目中的models目录下, 解压后,目录中应该存在 models--Systran--faster-whisper-small。en.m4a|.wav = 原始视频中的音频文件(包含所有背景音和人声)

西唯兵欧泡的博客 2341

python(2):python_re模块

re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。因为,re模块中的方法大都借助于正则表达式,故先学习正则表达式。

奔跑在路上you的博客 2727

【学习总结】飞跨电容三电平boost拓扑发波分析与matlab仿真

正常工作时,飞跨电容的电压大约控制在输出电压的一半,降低了开关器件的耐受电压。

晞子的技术札记 1万+

还在为乱码匹配发愁?,深度解析Python re 模块中的 \u、\w 与 Unicode 标志位

轻松掌握Python正则表达式的Unicode匹配,解决乱码文本处理难题。详解\u、\w及re.UNICODE标志位在中文、多语言场景中的应用,精准提取非ASCII字符。方法实用,兼容性强,值得收藏。

InstrIsle的博客 873

SDIO_WiFi驱动学习之安卓WLAN架构介绍及调用流程分析

一、引言 上一篇博客大概介绍了MMC子系统和SDIO相关知识及架构,这一篇博客则大致分析安卓的WLAN架构及上层如何调用WLAN驱动的流程。 虽然我工作的开发环境是安卓系统,但由于我不是专业的安卓应用/框架开发工程师,所以对安卓层的一些代码并不是特别熟悉,只能大致梳理流程,不专业的地方请谅解。 本文部分内容摘抄自网络,若有侵权,请联系删除。 二、安卓WLAN架构 1、应用框架(Application framework) 在应用程序框架级别是应用程序代码,它使用各种android.net..

陈子陌的博客 5088

【深度学习基础】一篇弄懂训练集、验证集和测试集(呕心沥血版)

在深度学习中,训练集、验证集和测试集是构建和评估模型的核心组成部分。训练集用于模型的学习和参数优化,验证集帮助调整超参数和防止过拟合,而测试集则用于最终评估模型的泛化性能。正确划分和使用这三类数据集,对于开发高效、可靠的深度学习模型至关重要。本文将深入解析它们的作用、划分方法以及在实际应用中的注意事项,帮助你全面理解并掌握数据集的科学使用方法,从而提升模型的实际表现。

十二月的猫 3792

python正则模块—re

文章目录 一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$ 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$ 有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$ 有1~

雪辉博客 1025

MIPI C-PHY介绍(Specification for C-PHY V1.2)

本文档描述了一个名为C-PHY的高速串行接口,它在带宽有限(bandwidth limited channels,看的有人说C的含义就是channel limit)的通道上提供高吞吐量性能,用于连接到外设,包括显示器和摄像头。首先0x4fff在0x4000~0x4fff区域,则f=(0,0,0,0,0,0,1),顺序是S6~S1;最后,端到端的传输过程是什么样呢,如下图所示,16bit先转换成7个符号(每个符号3位,共21位),然后并行数据转换成串行数据,输送到符号编码器和3个线的驱动器,接收端流程相反。

qflook的博客 5875

你真的会写匹配emoji的正则吗?,揭秘Python中Unicode字符类与代理对的匹配难题

掌握Python正则表达式的Unicode匹配技巧,轻松解决emoji等特殊字符识别难题。详解Unicode字符类与代理对处理机制,适用于文本清洗、表情符号提取等场景,提升匹配准确性。方法实用高效,值得收藏。

StepLens的博客 799

07 Zabbix 微信告警

Zabbix 微信告警 1.注册企业微信 企业微信注册地址:https://work.weixin.qq.com 2.进入企业微信后台管理 2.1 添加微信成员 2.2创建应用 2.3 获取四项数据 (1)AgentID (2) Secret (3) 企业ID (4)部门ID 3.Zabbix Server配置 3.1确认脚本目录 # grep alertscripts /etc/zabbix/zabbix_server....

Jian Sun_的博客 1297

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

为什么你的ChatGPT正则在Python里跑通,上线就崩溃?——深度解析re.compile()隐式标志、Unicode边界与LLM token截断的致命耦合

解决ChatGPT生成正则模式在Python上线崩溃问题:深度剖析re.compile()隐式标志、Unicode边界处理与LLM token截断的耦合风险。适用于Web服务、API开发等生产场景,提供可落地的校验与转义方案。值得收藏

CodeIsle的博客 227

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python正则进阶:从字符串匹配到文本处理操作系统

正则表达式是文本处理的基础能力,其本质是微型形式语言编译器,通过NFA引擎实现模式匹配。理解回溯机制、编译缓存(re.compile)、Unicode边界(\b/\w行为)与断言(?!、?<!)等原理,可显著提升匹配精度与性能。在日志解析、API响应提取、数据清洗等工程场景中,命名捕获组和预编译正则带来可维护性与执行效率的双重价值。本文聚焦Python中高级正则的核心机制与生产级实践,覆盖性能优化、ReDoS防护、Unicode处理及regex库增强能力。

weixin_30875157的博客 354

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pylibcudf RegexFlags 深入指南:cuDF 字符串正则标志枚举的用法、组合与底层实现

RegexFlags 是 pylibcudf 字符串子系统中用于控制正则表达式解析行为的标志枚举,是 [pylibcudf 字符串正则 API](https://link.gitcode.com/i/efea957dbdd056049fc6a3a4b0a34839) 的基石:几乎所有的正则类操作(`contains_re`、`replace_re`、`extract`、`findall`、`spl

gitblog_00609的博客 348

如何让 Agent 自动跑完逆向链路并交回带证据的结论:REA 逆向分析编排指南

手上只有一个闭源二进制、没有源码时,传统做法是打开 Hopper 或 IDA,在窗口里找字符串、看交叉引用、读反编译——这条链路没法交给脚本,更没法交给 Agent。REA(npm 包 `rea-agents`)把这条链路接给 AI Agent 和终端:它调度你已有的 Hopper、Ghidra、IDA 或 Kuna,把"搜索—查引用—反编译—出结论"自动跑完,每条结论附带证据和已知局限。 **

gitblog_00111的博客 196

x16-PRos 首次启动设置向导完全教程:一步步完成系统安装、磁盘选择与个性化定制

x16-PRos 是一款完全用 NASM 汇编编写的 16 位实模式操作系统。首次启动时,它会**自动进入首次启动设置向导(First-Boot Setup Wizard)**,引导你完成系统安装、磁盘选择,以及用户名、密码、时区、主题等个性化定制——全程无需手写任何配置文件,对新手非常友好。 本教程按照向导的真实执行顺序,带你一步步走完每一个设置步骤,并在最后告诉你向导到底往系统里写了什么、后

gitblog_00238的博客 153

Python数据集读取:从文件操作到生产级健壮读取

数据集读取是数据分析 pipeline 的起点,本质是操作系统文件系统、Python解释器内存管理与多格式数据规范的协同过程。理解文件描述符、字符编码(如UTF-8与GBK转换)、路径解析(pathlib)及内存控制(chunksize/dtype)等底层原理,能显著提升数据接入的稳定性与可维护性。在真实场景中,CSV乱码、Excel卡顿、大文件内存溢出、跨平台路径错误等问题,均源于对文件I/O机制的认知断层。掌握编码探测、分块流式处理、列类型显式声明和生产级校验(存在性/完整性/空值率)等关键技术,是构建

weixin_34203832的博客 392

Python数据类型转换全指南:隐式提升与显式强转实战

在Python中,数据类型转换是保障数据一致性与程序健壮性的基础机制。其核心原理在于解释器对类型安全的严格约束:隐式转换仅限无损的类型提升(如int→float),而显式转换则需开发者主动承担语义解析责任(如str→int)。这种机制直接支撑着金融计算精度控制、API数据清洗、日志二进制解析、结构化数据封装(dataclass)等关键工程场景。尤其当面对CSV字符串'12,345.67'、十六进制日志'0x1A2B'或嵌套JSON响应时,能否正确运用int()、Decimal()、dict(zip())、o

a304096740的博客 497

python3 核心笔记

本文主要是针对python3的一些核心要点做一些记录,感兴趣的可以关注和订阅。会持续更新,这个玩意学习一下,可以为数据分析和AI打下一定的基础。

yanghuashuiyue的专栏 617

Nim 语言手册深度解读:从词法、语法到类型系统与宏的完整技术指南

本指南以 Nim 官方语言手册([doc/manual.md](https://link.gitcode.com/i/a6fb20f96395a9a32bb82cbcc81d63c5))为核心骨架,系统讲解 Nim 语言的词法、语法、类型系统、语句与表达式、过程与模板宏、泛型、效果系统、异常处理、模块与包、Pragmas 以及 FFI 与线程等核心机制。读者将掌握 Nim 的编译模型与关键语义细节

gitblog_00476的博客 414

正则表达式读书笔记

re常量 1. IGNORECASE 语法: re.IGNORECASE 或简写为 re.I 作用: 进行忽略大小写匹配。 2. ASCII 语法: re.ASCII 或简写为 re.A 作用: 顾名思义,ASCII表示ASCII码的意思,让 \w, \W, \b, \B, \d, \D, \s 和 \S 只匹配ASCII,而不是Unicode。 3. DOTALL 语法: re.DOTALL 或简写为 re.S 作用: DOT表示.,ALL表示所有,连起来就是.匹配所有,包括换行符\n。.

m0_54654081的博客 301
上一篇: 为什么Python列表insert不能随便用?时间复杂度告诉你答案
下一篇: MyBatis foreach循环Map参数实战(资深架构师亲授优化技巧)
VarFlow
博客等级 码龄1年 164粉丝 2189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值