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

提取括号中的内容

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

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

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

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

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 "-->" vreturn/*** 提取中括号中内容,忽略中括号中的中括号* @param msg* @return*/    
ExtractMessage(_msg) {list := []start := 1startFlag := 0endFlag := 0msg:=StrSplit(_msg); OutputDebug % obj2str(msg)loop % msg.length(){i:=A_Indexif (msg[i] = "[") {startFlag+=1OutputDebug % "startFlag =" startFlagif (startFlag = endFlag + 1) {start := iOutputDebug % "start=" start}} else if (msg[i] = "]") {endFlag+=1OutputDebug % "endFlag =" endFlagif (endFlag = startFlag) {OutputDebug % "endFlag=" endFlaglist.Insert(SubStr(_msg,start + 1, i-start-1))}}}return list}

输出结果如下:

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

算法原理

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

http://www.lryc.cn/news/16260.html

相关文章:

  • 数据结构-算法的空间复杂度(1.2)
  • 【总结】python3启动web服务引发的一系列问题
  • Linux:基于libevent读写管道代码,改进一下上一篇变成可以接收键盘输入
  • C语言格式化输出总结:%d,%c,%s,%f, %lf,%m.nd,%m.nf,%m.ns 以及sprintf函数
  • Nginx之反向代理、负载均衡、动静分离。
  • 0401不定积分的概念和性质-不定积分
  • 数组中的各种迭代API方法手写
  • 详解量子计算:相位反冲与相位反转
  • C++——C++11第三篇
  • 180 2 22222
  • 成人高考初中毕业能报名吗 需要什么条件
  • ChatGPT初体验
  • ChatGPT概念狂飙!究竟魅力何在?
  • 如何下载阅读Spring源码-全过程详解
  • 学了两个月的Java,最后自己什么也不会,该怎么办?
  • 前端vue实现获取七天时间和星期几功能
  • zookeeper单机部署
  • 单片机输入输出模式
  • 数据结构_ 堆结构与堆排序(c++ 实现 + 完整代码 )
  • 【MySQL】sql中explain解释和应用
  • 从零实现深度学习框架:Seq2Seq从理论到实战【实战篇】
  • 【数据结构入门】-链表之单链表(1)
  • Docker竟如此简单!
  • 在外包干了几年,感觉自己都快费了
  • Java实现多线程有几种方式(满分回答)
  • 实例4:树莓派GPIO控制舵机转动
  • 【音视频处理】为什么MP3不是无损音乐?音频参数详解,码率、采样率、音频帧、位深度、声道、编码格式的关系
  • Linux 环境变量
  • 从功能测试(点点点)到进阶自动化测试,实现薪资翻倍我只用了3个月时间
  • aspnetcore 原生 DI 实现基于 key 的服务获取