【正则高手私藏技巧】:Python中零宽断言的3种高级用法曝光

第一章:零宽断言的核心概念与作用

什么是零宽断言

零宽断言(Zero-Width Assertion)是正则表达式中的一种特殊语法结构,用于匹配特定位置而非具体字符。它不会消耗输入字符串中的任何字符,因此被称为“零宽”。这类断言常用于限定匹配的上下文环境,例如确保某个模式仅在特定前缀或后缀存在时才匹配。

常见类型与语法

零宽断言主要包括四种类型:

  • 正向先行断言:(?=pattern),要求接下来的内容匹配 pattern
  • 负向先行断言:(?!pattern),要求接下来的内容不匹配 pattern
  • 正向后行断言:(?<=pattern),要求前面的内容匹配 pattern
  • 负向后行断言:(?<!pattern),要求前面的内容不匹配 pattern

实际应用示例

以下是一个使用正向先行断言的 JavaScript 示例,用于匹配以 ".txt" 结尾但不包含路径分隔符的文件名:


const regex = /\b\w+\.txt(?=$|(?=\s))/;
const text = "document.txt image.png notes.txt";
const matches = text.match(regex);
// 解释:匹配 ".txt" 后必须为字符串结尾或空格,且不捕获该部分
console.log(matches); // 输出: ["document.txt", "notes.txt"]

应用场景对比表

断言类型语法用途说明
正向先行(?=...)确认后续内容符合条件
负向先行(?!...)排除后续内容为特定模式
正向后行(?<=...)确保前面内容匹配指定模式
负向后行(?<!...)避免前面出现特定上下文

第二章:正向零宽断言的深度应用

2.1 理解正向先行断言:语法与匹配机制

正向先行断言(Positive Lookahead)是一种非捕获型断言,用于匹配某个位置之后**紧跟着特定模式**的场景,但不消耗字符。其语法为 (?=pattern)。
基本语法结构
  • (?=...):表示正向先行断言,条件满足时才继续匹配
  • 断言本身不包含在最终匹配结果中
  • 常用于限制匹配上下文,如密码强度校验
示例与分析
Windows(?=95|98|NT|2000)
该正则匹配名为 "Windows" 且其后紧跟 "95"、"98" 等操作系统的文本。例如,在字符串 "Windows2000" 中,"Windows" 被成功匹配,而 "2000" 仅作为条件验证,不被纳入结果。
匹配流程解析
尝试匹配 'Windows' → 检查后续是否为指定版本 → 成功则前进,失败则回溯
输入字符串是否匹配
Windows10否
WindowsNT是

2.2 提取特定前缀后的数据而不包含前缀

在处理字符串数据时,常需提取以特定前缀开头的子串,但结果中不应包含该前缀本身。这一需求广泛应用于日志解析、API 路径路由和配置项读取等场景。
常见实现方式
使用字符串切片结合 strings.HasPrefix 是最直观的方法。先判断前缀是否存在,再截取剩余部分。

func extractAfterPrefix(s, prefix string) (string, bool) {
    if strings.HasPrefix(s, prefix) {
        return s[len(prefix):], true // 返回去除前缀的剩余字符串
    }
    return "", false // 未匹配到前缀
}
上述函数中,len(prefix) 确定前缀长度,s[len(prefix):] 实现从该位置到末尾的切片,从而排除前缀。
性能优化建议
  • 对于高频调用场景,可预编译正则表达式以提升匹配效率
  • 避免频繁内存分配,考虑使用 strings.TrimPrefix 配合布尔判断

2.3 利用正向后行断言精准定位关键词

在复杂文本解析中,正向后行断言(positive lookbehind)能确保目标关键词仅在特定前缀存在时被匹配,提升提取精度。
语法结构与行为特征
正向后行断言使用 (?<=...) 语法,表示当前置模式成立时,才继续匹配后续内容。该断言不消耗字符,仅作条件判断。
(?<=\$)\d+
此正则匹配紧跟在美元符号后的数字,但不包含 $ 本身。(?<=\$) 验证前一个字符为 $,\d+ 捕获连续数字。
实际应用场景
  • 提取价格数值(如从 "$19.99" 中获取 "19.99")
  • 识别特定前缀的标识符(如日志中以 "[ERROR]" 开头的消息)
结合非捕获组与量词,可构建更复杂的上下文感知规则,实现高准确率的信息抽取。

2.4 在日志解析中实现上下文敏感匹配

在复杂的系统日志中,单一的正则匹配难以准确识别事件语义。引入上下文敏感匹配机制,可基于前序日志行的状态动态调整当前行的解析策略。
状态机驱动的解析流程
采用有限状态机(FSM)跟踪日志流的上下文状态,例如“登录尝试”后若出现“权限拒绝”,则归类为安全事件。

状态转移图:

  • 初始状态 → 检测到"User login" → 登录态
  • 登录态 + "Failed auth" → 触发告警
  • 登录态 + "Session closed" → 回退初始态
带上下文的正则匹配示例
# context_aware_parser.py
import re

context = {}
patterns = {
    'login': re.compile(r'User (\w+) logged in'),
    'fail': re.compile(r'Failed password for (\w+)')
}

def parse_log(line):
    if patterns['login'].search(line):
        user = patterns['login'].search(line).group(1)
        context['user'] = user
        return {'event': 'login', 'user': user}
    elif patterns['fail'].search(line):
        user = patterns['fail'].search(line).group(1)
        if context.get('user') == user:
            return {'event': 'suspicious_activity', 'user': user}
    return {'event': 'unknown'}
该代码通过维护context字典记录最近登录用户,在后续日志中比对用户名,实现跨行语义关联。

2.5 避免常见陷阱:贪婪模式与性能优化

在正则表达式处理中,贪婪模式是导致性能下降的常见原因。默认情况下,量词如 * 和 + 会尽可能多地匹配字符,可能导致回溯爆炸。
贪婪与非贪婪模式对比
# 贪婪模式
.*<\/div>

# 非贪婪模式
.*?<\/div>
上述代码中,贪婪模式会从第一个 <div> 一直匹配到最后一个 </div>,而非贪婪模式通过 ? 限定符逐个匹配,尽早结束,提升效率。
优化建议
  • 优先使用非贪婪量词 *?、+? 控制匹配范围
  • 避免嵌套贪婪表达式,减少回溯深度
  • 用具体字符类替代通配符 .,如 [^"]
合理设计正则结构可显著降低CPU开销,尤其在处理大文本时效果明显。

第三章:负向零宽断言的实战技巧

2.1 掌握负向先行断言:排除干扰模式

负向先行断言(Negative Lookahead)是一种强大的正则表达式机制,用于匹配不后跟特定模式的字符串位置。
语法结构
其基本形式为 (?!pattern),表示当前位置之后不能匹配 pattern。例如:
q(?!u)
该表达式匹配字母 "q" 后面**不紧跟 "u"** 的情况,如 "Qantas" 中的 "q",但不会匹配 "quit"。
实际应用场景
在日志过滤中,可排除特定状态码:
\d{3}(?! 404)
此表达式匹配非跟随 " 404" 的三位数字,有助于筛选非404响应码。
  • 负向先行断言不消耗字符,仅作条件判断
  • 适用于数据清洗、安全校验等需排除特定上下文的场景

2.2 结合字符类实现复杂条件过滤

在正则表达式中,字符类(Character Classes)为模式匹配提供了更灵活的控制能力。通过方括号 [] 定义字符集合,可匹配其中任意一个字符。
基础字符类用法
例如,匹配小写字母或数字:
[a-z0-9]+
该表达式表示连续匹配至少一个 a 到 z 或 0 到 9 的字符。连字符 - 表示范围,+ 表示一次或多次。
组合使用提升过滤精度
结合否定字符类 [^...] 可排除特定字符:
[^aeiou\s]
匹配所有非元音字母且非空白符的字符,适用于敏感词过滤等场景。
  • [A-Z]:匹配大写字母
  • [^0-9]:匹配非数字字符
  • [\w\s]:匹配单词字符或空格
通过嵌套和组合,字符类能有效支撑复杂文本过滤逻辑。

2.3 在文本清洗中剔除不符合上下文的内容

在构建高质量语料库时,剔除与上下文逻辑不一致的内容是关键步骤。这类噪声可能包括前后矛盾的陈述、主题漂移的段落或语义断裂的句子。
基于语义连贯性过滤
通过计算句子间的语义相似度,识别并移除上下文脱节的片段。常用方法包括余弦相似度与预训练模型(如BERT)结合:

from sentence_transformers import SentenceTransformer
import numpy as np

model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
sentences = ["用户登录失败", "系统自动发送验证码", "香蕉很甜"]
embeddings = model.encode(sentences)
similarity = np.dot(embeddings[0], embeddings[1])  # 高相似度
similarity_outlier = np.dot(embeddings[0], embeddings[2])  # 低相似度
上述代码利用句向量计算语义关联,若相似度低于阈值,则判定为异常内容。
规则与模型协同策略
  • 使用正则表达式清除格式错误文本
  • 结合分类模型识别主题一致性
  • 引入滑动窗口机制评估局部连贯性

第四章:复合场景下的高级组合策略

4.1 联用正向与负向断言构建精确规则

在正则表达式中,正向和负向断言可用于在不消耗字符的情况下进行条件匹配,从而提升规则的精确度。通过组合使用这些断言,可有效限定匹配上下文。
正向先行断言与负向先行断言
正向先行断言 (?=...) 要求后续内容匹配指定模式,而负向先行断言 (?!...) 则要求不匹配。
^\d{3}(?=\.)(?!000)
该规则匹配三个数字开头且后跟句点,但排除“000”开头的情况。例如,“123.456”匹配,而“000.123”被排除。
应用场景示例
  • 验证IP地址段时排除保留地址
  • 提取包含特定关键词但不含敏感词的日志行
联用断言能显著增强模式匹配的准确性与安全性。

4.2 嵌套断言处理多层上下文依赖

在复杂系统测试中,单一断言难以验证多层上下文的数据一致性。嵌套断言通过层级化校验机制,确保各作用域内的状态符合预期。
结构化断言示例

assert.Equal(t, "success", response.Status)
assert.NotNil(t, response.Data)
assert.Equal(t, 1001, response.Data.UserID)
assert.Contains(t, response.Data.Roles, "admin")
上述代码展示了从响应状态到用户角色的逐层验证。第一行确认接口调用成功;第二行确保数据体非空;第三、四行深入数据内部,验证用户ID与权限角色。
断言逻辑分层优势
  • 提升错误定位效率:异常发生时可快速锁定具体层级
  • 增强测试可读性:代码结构映射业务逻辑层次
  • 支持上下文传递:外层断言通过后,内层可安全引用相关对象

4.3 验证密码强度:结合前后字符条件判断

在构建安全认证系统时,密码强度验证需综合考虑字符组合特征。仅检查长度或字符类别不足以防范弱密码,必须分析相邻字符间的模式。
基于上下文的规则设计
通过检测连续相同字符、键盘序列(如"123")和常见弱密码片段,可显著提升判断准确性。例如:
// 检查是否存在连续递增或递减的ASCII序列
func hasSequentialChars(password string) bool {
    for i := 0; i < len(password)-2; i++ {
        a, b, c := password[i], password[i+1], password[i+2]
        if (b == a+1 && c == b+1) || (b == a-1 && c == b-1) {
            return true
        }
    }
    return false
}
该函数遍历密码中每三个连续字符,判断是否构成ASCII码上的递增或递减序列,有效识别"abc"或"321"类弱密码。
多维度评分模型
采用加权评分机制,结合字符多样性、位置分布与上下文风险:
条件分值
包含大小写字母、数字、符号+20/类
存在连续相同字符-15
匹配键盘序列-20
总长度 ≥ 8+10
最终得分低于40视为弱密码,60以上为强密码,实现动态自适应判断。

4.4 实现代码静态分析中的模式嗅探

在静态分析中,模式嗅探用于识别代码中潜在的反模式或安全漏洞。通过抽象语法树(AST)遍历,可精准匹配特定代码结构。
常见嗅探模式示例
  • 硬编码敏感信息(如密码、密钥)
  • 不安全的API调用(如 eval())
  • 资源未释放(如文件句柄、数据库连接)
Go语言中的AST遍历实现

func visit(n ast.Node) {
    if call, ok := n.(*ast.CallExpr); ok {
        if sel, ok := call.Fun.(*ast.SelectorExpr); ok {
            if sel.Sel.Name == "Exec" {
                fmt.Println("潜在SQL注入:", sel.Sel.Name)
            }
        }
    }
}
该函数在AST中查找名为 Exec 的方法调用,常用于检测未参数化的SQL执行操作。参数 n 为当前节点,通过类型断言判断是否为函数调用表达式。
检测规则优先级表
模式类型严重等级修复建议
硬编码密钥高使用环境变量或密钥管理服务
忽略错误返回中显式处理或日志记录

第五章:从掌握到精通:零宽断言的思维跃迁

理解零宽断言的本质

零宽断言(Zero-Width Assertions)不消耗字符,仅用于位置匹配。它们在处理复杂文本结构时极为高效,尤其适用于边界条件判断。

实战中的正向先行断言

假设需提取所有紧跟“USD”的数字,但不包含“USD”本身:

\d+(?= USD)

匹配 "100 USD" 中的 "100",但不会捕获 "50 EUR"。

负向先行断言的应用场景
  • 过滤日志中非“error”级别的条目:(?!error)\w+_log
  • 验证密码强度时排除常见弱口令模式
  • 在词法分析中跳过特定关键字前缀
结合后行断言实现精准定位

提取邮箱用户名部分(@前内容),可使用:

(?<=\w+)@example\.com

在 "user@example.com" 中精准定位“user”而不包含@符号。

性能优化建议
断言类型适用场景注意事项
(?=...)字段后置条件校验避免嵌套过多导致回溯爆炸
(?<=...)固定长度前缀匹配JavaScript 不支持可变长度后行断言
输入文本: price_1: 250 USD, price_2: 300 EUR 正则表达式: \d+(?= USD) 匹配结果: [250]
使用Qt Creator自带的Qt Designer构造UI界面流程总结 在本文中,我们将总结使用Qt Creator自带的Qt Designer构造UI界面的流程。在对话框中,您可以选择一个控件的信号,然后将其连接到另一个控件的槽。例如,您可以将按钮的点击信号连接到一个槽函数,以响应按钮的点击事件。右键单击窗口设计器中的空白区域,选择适当的布局管理器,如水平布局、垂直布局或网格布局。在Qt Designer中,您可以使用各种预定义的UI控件来设计应用程序的界面。现在,您可以在应用程序的源代码中使用生成的UI界面。在您的源文件中,包含相应的头文件,然后创建一个UI界面的实例。 阅读详情

相关推荐

运算放大器噪声分析实战:从理论到TINA-TI仿真的完整指南

本文深入探讨运算放大器噪声分析的完整流程,从基础理论到TINA-TI仿真实践。详细解析噪声来源、运放噪声模型建立、手工计算方法,并结合TI工具进行高效仿真验证,提供低噪声电路设计优化策略,帮助工程师提升精密电子系统性能。

Jerry的专栏 947

正则表达式:零宽断言

  

读万卷书 行万里路 8711

2018南京大学计算机夏令营机试

1. Count number of binary strings without consecutive 1’s Given a positive integer n(3≤n≤90), count all possible distinct binary strings of length n such that there are no consecutive 1's . Examples...

climber16的博客 1万+

javascript 零宽断言,看这篇就足够了

1、定义 先来看一个例子: 在字符串 ‘北京市(朝阳区)(西城区)(海淀区)’ 中,取出北京市这段不被()包裹的字符 我们分析一下这个题目: 这个题,要求取出没有被() 包裹的内容 也就是说,我要断言某个位置上的内容不含有完整的(),且这段内容的后面紧紧跟随的是( 那么这段内容本身是什么并不重要 那我可以构建一个正则表达式如下/.*?(?=\()/ 这个正则什么意思呢? 假设你已经知道在正则中: . 表示任意字符 *表示可以匹配任意的次数 ?表示重复前面的内容,要么零次,要么一次,最多重复一次 所以

2608

android 如何分析应用的内存(十六)——使用AS查看Android堆

在前面,先介绍了如何使用jdb和VS code查看应用栈相关内容。本文将介绍,如何查看堆中的内容。

安仔的博客 4254

高匿反爬实战:Python打造无痕爬虫,规避风控系统追踪

网络层匿踪:核心是使用住宅IP代理池,按真实用户IP画像匹配,控制请求频率;协议层匿踪:动态生成请求头(每次都不同),参数添加随机噪声,避免规律化;行为层匿踪:模拟人类的非规律行为(贝塞尔轨迹、随机停顿、非精准点击);设备层匿踪:伪造Canvas/WebGL指纹,禁用webdriver标识,每次请求更换指纹;核心原则:无痕爬虫的本质是“无限接近真实用户”,所有维度都要消除爬虫特征,而非单一维度伪装。打造真正的无痕爬虫需要全维度的匿踪策略,单一维度的伪装极易被高级风控系统识别。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2642

正则表达式之零宽断言详解

=exp) 零宽度正回顾后发断言 Zero-width positive lookbehind。exp) 零宽度负回顾后发断言 Zero-width negative lookbehind。=exp) 零宽度正预测先行断言 Zero-width positive lookahead。exp) 零宽度负预测先行断言 Zero-width negative lookahead。>exp) 原子组 Non-backtracking (greedy)

_s_none 1428

Dify智能体开发:Dify文件上传

相较于聊天文本,文档文件能够承载大量的信息,例如学术报告、法律合同。受限于 LLM 自身仅能够支持文件或图片,难以获取文件内更加丰富的上下文信息,应用的使用者不得不手动复制粘贴大量信息与 LLM 对话,增加了许多不必要的使用成本。

王国平的博客 2591

2、零宽断言

1、基本概念 断言:俗话的断言就是“我断定什么什么”,而正则中的断言,就是说正则可以指明在指定的内容的前面或后面会出现满足指定规则的内容, 意思正则也可以像人类那样断定什么什么,比如"ss1aa2bb3",正则可以用断言找出aa2前面有bb3,也可以找出aa2后面有ss1. 零宽:就是没有宽度,在正则中,断言只是匹配位置,不占字符,也就是说,匹配结果里是不会返回断言本身。 零宽断言正如它的名字一样,是一种零宽度的匹配,它匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置而已。 javas

weixin_43613849的博客 2614

13《CAN总线五种错误类型,故障判定全解析》

CAN总线规定,发送节点在发送完EOF字段后,会留出一个ACK Slot(应答槽)。这个槽里,发送节点自己会输出隐性电平(逻辑1),然后“期待”至少有一个其他节点在这个槽里把它拉成显性电平(逻辑0)。如果这个槽结束时仍然是隐性电平,发送节点就判定:刚才那帧报文,没有任何一个节点成功接收——这就是应答错误。简单说,就是“我喊了一嗓子,却没人应声”。

2401_88858637的博客 265

30分钟用 Restful ABAP Programming(RAP)模型开发一个支持增删改查的 Fiori 应用

2016年时,Jerry曾经写过一系列关于SAP Fiori Smart Template(现在更名为Fiori Elements了)的博客,介绍了所谓的MDD开发方法论 - Metadata Driven Development,即通过开发维护了对应annotation(注解)的CDS view,结合SAP WebIDE,能够花费最少的编程代价,就能够在短时间内获得一个支持增删改查的Fiori应......

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5952

python正则表达式系列(5)——零宽断言

本文主要总结了python正则零宽断言(zero-length-assertion)的一些常用用法。

键盘上的手艺人 9426

【100%通过率】华为OD机试真题 Python【数字最低位排序】【最低位排序】

2023华为OD机试真题 Python【数字最低位排序】【最低位排序】 给定一个非空数组(列表) 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素,相对位置保持不变 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位

MISAYAONE的博客 1902

正则之零宽断言

1.什么是零宽断言: 零宽断言正如它的名字一样,是一种 零宽度的匹配. 它匹配到的内容不会保存到匹配结果中去, 最终匹配结果只是一个 位置 而已. 2.何时使用零宽断言: 在使用正则表示式时, 有时, 我们需要捕获的内容前后必须是特定内容, 但又不捕获这些特定内容的时候, 零宽断言就起到作用了 3.如何使用零宽断言: 零宽断言的作用是 给指定位置添加一个限定条件, 用来规定此位置之前或者之后的字符...

weixin_46317118的博客 618

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

零宽断言简介$使用示例

零宽断言在正则表达式中有四种主要形式,分别是正向预查、负向预查、正向回顾后发断言和负向回顾后发断言。

m0_73581119的博客 558

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python中正则表达式零宽断言_程序员入门基础:python正则表达式的零宽断言

一、零宽断言此篇文章为python正则表达式的高阶入门,正则基础入门请参考程序员入门基础:python的正则表达式。断言也可以理解为判断的意思,正则表达式中有很多这样的断言,常见的如 ^ 和 /A,匹配字符串或者行的末尾 $ 和 /Z,单词边界/B等等。零宽断言是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置,断言本身并不匹配,因为匹配的宽度为零,故零宽。当然零宽断言还有各种叫法,如环视、预搜...

weixin_39772651的博客 544

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

正则表达式零宽断言的基本使用方法

注:此次只涉及零宽断言,不涉及负向零宽断言; 定义 零宽断言:零宽断言是正则表达式中的一种方法,正则表达式在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。(此处度娘) 零宽断言又分为正向零宽断言和反向零宽断言(名字有多种说法,都可度娘了解,下面的理解示例,在百科中也可查看到); 正向零宽断言:表达式为-(?=expression);作用:即匹配语句之前的...

weixin_43735519的博客 1100

零宽断言 python_零宽断言详解

零宽断言的意思是(匹配宽度为零,满足一定的条件/断言) 我也不知道这个词语是那个王八蛋发明的,简直是太拗口了。零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ \< \> 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进...

weixin_39848097的博客 614

js正则表达式分割字符串_Python中正则表达式的巧妙使用

来源丨数据分析1480https://mp.weixin.qq.com/s/uQyW_mlW8CnbtPSF7Z7xFA前言正则表达式就是从字符串中发现规律,并通过“抽象”的符号表达出来。打个比方,对于2,5,10,17,26,37这样的数字序列,如何计算第7个值,肯定要先找该序列的规律,然后用n2+1这个表达式来描述其规律,进而得到第7个值为50。对于需要匹配的字符串来说,同样把发现规律作为第一...

weixin_39623716的博客 237

【曾贤志】用Python处理Excel数据 - 第3季 正则篇

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎本课程将python的正则表达式的技术应用到excel数据处理中,更加提高了数据处理的能力。

零宽断言 python_正则表达式-零宽断言

[toc]一、零宽断言-介绍零宽断言,它匹配的内容不会提取,其作用是在一个限定位置的字符串向前或向后进行匹配查找。1.1、应用场景排除查找,查找不含有某段字符串的行包含查找,查找含有某段字符串的行二、断言的分类2.1、正先行断言什么是正先行断言,就是在字符串相应位置之前进行查找匹配,使用 (?=exp) 匹配exp前面的位置。import restr = 'abcgwcab'pattern = '...

weixin_39969257的博客 404

正则表达式之零宽断言

介绍: 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ \< \> 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。 1.零宽度正预测先行断言 (...

weixin_34258078的博客 183

正则表达式(分组、零宽断言)

step2:再根据pattern2位置,判断pettern1匹配结果,若pattern1匹配成功(正向:断言成功,负向:断言失败),反之亦然。一种特殊形式的正则表达式,匹配时不消耗原始字符,只判断pattern1是否匹配成功,如同:^ $ \b等边界匹配一样。step2:再判断pettern1匹配结果,若pattern1匹配成功(正向:断言成功,负向:断言失败),反之亦然。step3:若断言成功,返回step1匹配结果,反之,返回结果为:None。:pattern)。:只引用匹配结果,而不是引用匹配模式。

汝飞@大模型 的博客 3230

py爬虫

from urllib import request import re urlopen = request.urlopen('https://docs.oracle.com/javase/8/docs/api/index.html') data = urlopen.read() html = data.decode('utf-8') # 零宽断言一共分为正向和反向两类,每类又分为预测先行和回顾后...

weiwjacsdn的博客 727

正则表达式零宽断言详解(?=,?<=,?!,?<!)

在使用正则表达式时,有时我们需要捕获的内容前后必须是特定内容,但又不捕获这些特定内容的时候,零宽断言就起到作用了 正则表达式零宽断言: 零宽断言是正则表达式中的难点,所以重点从匹配原理方面进行分析。零宽断言还有其他的名称,例如"环视"或者"预搜索"等等,不过这些都不是我们关注的重点。 我很强,我想直接看例子上手用 一.基本概念: 零宽断言正如它的名字一样,是一种零宽度的匹配,它匹配到的内...

weixin_30642869的博客 610

必须掌握的Python正则核心技术:零宽断言详解,错过等于损失一个亿

掌握Python正则表达式的零宽断言应用,精准匹配文本边界条件。详解前瞻后顾语法,适用于日志提取、数据清洗等场景,提升匹配效率与准确性。无需捕获子串,逻辑更清晰,值得收藏。

QuickProceed的博客 830
上一篇: 为什么你的爬虫效率低下?,可能是没用好requests.Session()
下一篇: PyQt5跨线程UI更新难题破解(信号通信全链路详解)
InitFlow
博客等级 码龄1年 145粉丝 2166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值