You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多行字符串条件正则匹配:校验board add 0/1规则

Python多行文本正则校验板卡配置方案

问题关联

本问题关联Stack Overflow历史提问《Unable to use conditional regex to test my string in python》,原有方案仅支持逐行字符串处理,无法覆盖多行字符串的匹配校验需求。

校验规则

  • 仅针对board add 0/1条目单独编写规则,不使用board add 0/\d+通配写法,后续将逐个扩展规则覆盖board add 0/2至board add 0/21的校验
  • 合法判定逻辑:
    • 若字符串中存在board add 0/1条目,其后必须跟随合法型号aaa或bbb,否则判定为非法
    • 若字符串中不存在board add 0/1条目,直接判定为合法
  • 校验结果通过bool(re.match(...))返回,需全部覆盖三类测试场景:
    • 普通匹配场景:多行文本包含 board add 0/1 aaa及其他正常板卡配置条目,返回True
    • 错误型号场景:多行文本中 board add 0/1后接非法型号名xxx,返回False
    • 缺失0/1板卡场景:多行文本无 board add 0/1配置条目,其余板卡配置正常,返回True

此前方案问题

此前编写的多版正则(例如(board add 0/1)? (?(1) (aaa|bbb))、^(?:(?!board add 0/1).)*$|board add 0/1 (?:aaa|bbb)等)均无法同时通过全部测试用例,分别在错误型号场景、缺失板卡场景返回错误校验结果。

可行实现

正则代码

使用re.DOTALL与re.MULTILINE模式配合负向预查逻辑即可覆盖全部场景,代码如下:

import re
check_pattern = r'^(?!.*board add 0/1 (?!(?:aaa|bbb)\b)).*$'
# 调用示例
# result = bool(re.match(check_pattern, target_text, re.DOTALL | re.MULTILINE))

逻辑说明

  • re.DOTALL模式让.可以匹配换行符,实现跨行全局扫描;re.MULTILINE模式让^和$匹配整个文本的首尾位置,保证全量校验
  • 核心负向预查逻辑(?!.*board add 0/1 (?!(?:aaa|bbb)\b))会全局扫描文本:只要存在board add 0/1后接非aaa/bbb的非法内容,整个匹配直接失败;如果文本中完全不存在board add 0/1条目,预查条件直接成立,匹配成功

扩展方式

后续新增其他槽位的校验规则时,只需将正则中的0/1替换为对应槽位编号,将(?:aaa|bbb)替换为对应槽位支持的合法型号列表即可,无需改动整体正则结构。

内容的提问来源于stack exchange,提问作者Mond Wan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:51:27