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

求助:如何用regsub统一包裹文本中含下划线的小时段序列?

批量用!包裹文本中的连续小时段

需求示例

"  06 07_08_09_10_11_12_13_14_15_16_17_18_19_20 21 22 23 Hour"
-> "  06 !07_08_09_10_11_12_13_14_15_16_17_18_19_20! 21 22 23 Hour"
"  19_20 21 22 23 00 01 02 03 04 05 06_07_08_09_10_11_12 Hour"
-> "  !19_20! 21 22 23 00 01 02 03 04 05 !06_07_08_09_10_11_12! Hour"
"  _20 21 22 23 00 01 02 03 04 05 06 07 08_09_10_11_12_13 Hour"
-> "  !_20! 21 22 23 00 01 02 03 04 05 06 07 !08_09_10_11_12_13! Hour"

问题

需要将文本中连续的小时段(含_开头的单时段、数字开头的多时段)用!包裹,此前尝试的命令存在缺陷:

  • regsub -all {(\d+_\d+)} $string "!\1!":无法匹配_20这类_开头的时段
  • 针对_\d+的regsub:会出现错误包裹(如05 06!_07_08...)

通用解决方案

使用以下Tcl regsub命令即可覆盖所有场景:

regsub -all {((?:_\d+|\d+)(?:_\d+)*)} $string "!\1!"

正则表达式解析

  • (?:_\d+|\d+):匹配时段的起始部分,支持两种格式:_+数字,或纯数字
  • (?:_\d+)*:匹配后续任意数量的_+数字片段,确保整个连续时段被完整捕获
  • 整个匹配内容作为分组\1,替换为!\1!实现包裹

内容的提问来源于stack exchange,提问作者Hugo Simões

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:02:35