提取括号中的内容

2023-05-16

正则能解决不嵌套的括号内容提取问题

遇到一个问题,就是需要提取字符串中每一个中括号里的内容,在网上搜了一下,发现用正则表达式

(\[[^\]]*\])

可以提取中括号中的内容,以下面文本为匹配对象:

PerformanceManager[第1个中括号]Product[第2个中括号]<[第3个中括号]79~

匹配结果为:

0-->第1个中括号
1-->第2个中括号
2-->第3个中括号

(可以用工具测试下,网址:http://tools.jb51.net/regex/javascript )

带嵌套括号的文本处理

难度升级:如果中括号中还包含中括号,正则表达式就失去作用了,不得不另想办法,自己动手,丰衣足食。

AutoHotkey代码如下:

msg := "PerformanceManager[第1个中括号]Product[第2个中括号[中括号中包含中括号]]<[第3个中括号]79~"

for k,v in ExtractMessage(msg)
  MsgBox % k "-->" v

return

  /**
   * 提取中括号中内容,忽略中括号中的中括号
   * @param msg
   * @return
   */    
ExtractMessage(_msg) {
    list := []
    start := 1
    startFlag := 0
    endFlag := 0
    msg:=StrSplit(_msg)
    ; OutputDebug % obj2str(msg)
    loop % msg.length()
    {
      i:=A_Index
      if (msg[i] = "[") {
        startFlag+=1
        OutputDebug % "startFlag =" startFlag
        if (startFlag = endFlag + 1) {
          start := i
          
          OutputDebug % "start=" start
        }
      } else if (msg[i] = "]") {
        endFlag+=1
        OutputDebug % "endFlag =" endFlag
        if (endFlag = startFlag) {
          OutputDebug % "endFlag=" endFlag
          list.Insert(SubStr(_msg,start + 1, i-start-1))
        }
      }
      
    }
    return list
  }

输出结果如下:

0-->第1个中括号
1-->第2个中括号[中括号中包含中括号]
2-->第3个中括号

算法原理

主要思路就是遍历字符串,在中括号的开始和结束位置做标记计数,如果是中括号开始位置对应的结束位置,那么开始位置和结束位置的计数是一致的,这样截取的就是一个完整的中括号的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提取括号中的内容 的相关文章

随机推荐

  • vue3使用websocket简易封装,包含错误重连机制

    websocket实现的全双工通信 xff0c 真真太香了 xff0c 以下是笔者在使用时 xff0c 自己封装的一个简易js工具 若需要源码 xff0c 请移步这里 1 初始化连接 64 description 初始化websocket
  • CentOS7.2安装pyspider

    按照pyspider官方QuickStart xff0c 安装pyspider之前先安装pip xff0c 下面命令直接摘抄了 http blog csdn net myfancysky article details 48847971 w
  • Cannot find module ‘@/xxx‘ or its corresponding type declarations.Vetur(2307)

    问题 开发 vue3 43 ts 项目 xff0c 使用了 monorepo 多个项目在同一个仓储 xff0c 但是在 script 标签里引 ts 文件报错了 xff0c vetur 插件没有应用项目下 tsconfig 配置 xff0c
  • C++学习笔记(《C++新经典》基础部分)

    文章目录 第 9 章 指针9 2 变量的指针和指向变量的指针变量9 2 3 指针变量作为函数参数 第 10 章 结构体与共用体10 1 结构体类型定义 xff0c 结构体变量的定义 引用与初始化10 1 1 定义一个结构体类型10 1 2
  • 汇编中基本的数据类型

    1 字节 xff08 DB xff09 define byte 一个字节有8位二进制组成 xff0c 其最高位是第7位 xff0c 最低位是第0位 在表示有符号数时 xff0c 最高位就是符号位 00001001 xff1d 9 10001
  • 不改HOST,另类打开谷歌搜索的方法

    Google 国内外镜像地址 xff1a http www opengg cn http www gfsoso com http www xiexingwen com http www wow com http www 886404 com
  • x86汇编指令详解

    80x86指令系统 80x86指令系统 xff0c 指令按功能可分为以下七个部分 1 数据传送指令 2 算术运算指令 3 逻辑运算指令 4 串操作指令 5 控制转移指令 6 处理器控制指令 7 保护方式指令 3 3 1数据传送指令 数据传送
  • 汇编指令解释大全

    汇编语言指令详讲 2011 05 13 17 31 32 标签 xff1a it 分类 xff1a 汇编 C C java VB编程 AAA 未组合的十进制加法调整指令 AAA ASCII Adgust for Addition 格式 AA
  • 基于 SpringBoot + Vue 实现的可视化拖拽编辑的大屏项目

    一个基于 SpringBoot 43 Vue 实现的可视化拖拽编辑的大屏项目 AJ Report AJ Report由 安吉加加 开源的一个BI平台 xff0c 酷炫大屏展示 xff0c 能随时随地掌控业务动态 xff0c 让每个决策都有数
  • 汇编语言总结笔记

    汇编语言初识 xff08 一 xff09 开始学习汇编语言 xff0c 对相关的所学知识做个总结 xff0c 希望对自己可以有所提高 1 在计算机中数的表示方式 因为计算机中只能存储二进制数 xff0c 所以一般都是通过二进制直接进行存储
  • Ubuntu18.04重启后无法进入图形化界面

    如果你没有瞎卸载很多东西的话 xff0c 先在字符界面输入你的用户名和密码 xff0c 先尝试这个命令 xff1a sudo systemctl isolate graphical target 不行的话 xff0c 我的解决办法 xff1
  • STM32按键外部中断控制LED流水灯-HAL库

    续上一篇 基于HAL库的32流水灯 http t csdn cn 30QT4 一 硬件选用上 xff0c 我们增加一个四角按键 二 原理图设计 xff0c 上也增加一个开关 LED0 LED2 gt PA0 PA2引脚 KEY1 gt PA
  • Linux系统下定时关机命令shutdown

    接触过linux系统的都知道shutdown命令用于安全的关闭 重启计算机 xff0c 用决定命令shutdown不仅可以实现定时关机 xff0c 还可以由用户自己决定关机时的参数 xff1a 以下简单了解一下同样的功能在linux下使用s
  • 解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本不匹配的问题

    解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本 xff08 同时内核存在问题 xff09 不匹配的问题 不要轻易升级显卡驱动版本 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xf
  • Nginx+Consul_Upsyc动态切换配置实现动态流量切换

    Nginx 43 Consul Upsyc动态切换配置 大纲 基础概念安装流程测试例子 基础概念 动态配置可以让nginx在不停机的情况下 xff0c 实现动态的切换后端负载的服务器 xff0c 为各种发布方式提供基础的流量切换工作 htt
  • [AHK]实现Word保存前先更新目录

    重新定义热键Ctrl 43 s 用AHK重新定义Ctrl 43 s热键 xff0c 实现当按Ctrl 43 s后 xff0c 会先更新Word中插入的目录 AHK源代码 span class token punctuation span 作
  • win10把中文用户名改为英文用户名的两种方法

    电脑安装好win10系统后后创建了一个中文名的账户 xff0c 进入系统发现C User下的文件夹是中文名 xff0c 虽然中文名方便识别 xff0c 但是这样有一个很不好的地方 xff0c 那就是很多软件安装在个路径下 xff0c 有些软
  • [QMT]08-从本地行情数据解析历史K线信息

    用python解析QMT本地数据 获取本地行情数据 get local data field list 61 stock code 61 period 61 39 1d 39 start time 61 39 39 end time 61
  • Nginx+keepalived实现nginx高可用

    提前备好两台服务器 xff08 主 xff1a 192 168 2 34 xff0c 备 xff1a 192 168 2 24 xff09 xff0c 并安装好nginx xff0c nginx安装此文不做赘述 1 下载keepAlived
  • 提取括号中的内容

    正则能解决不嵌套的括号内容提取问题 遇到一个问题 xff0c 就是需要提取字符串中每一个中括号里的内容 xff0c 在网上搜了一下 xff0c 发现用正则表达式 可以提取中括号中的内容 xff0c 以下面文本为匹配对象 xff1a Perf