gpt4 book ai didi

regex - 使用正则表达式提取多个值

转载 作者:行者123 更新时间:2023-12-01 11:19:15 26 4
gpt4 key购买 nike

你能帮我弄清楚这个正则表达式吗?我的输出看起来像这样:

Wed Aug 30 14:47:11.435 EDT 

Interface : p16, Value Count : 9
References : 1, Internal : 0x1
Values : 148, 365, 366, 367, 371
120577, 120578, 120631, 120632

我需要从该输出中提取所有数字。可以有比已经存在的值更多或更少的值。到目前为止我有这个(但它只提取最后一个值):

\s+Values\s+:\s+((\d+)(?:,?)(?:\s+))+

谢谢

编辑:添加了完整的输出。

最佳答案

正如@dawg 所提到的,您需要在 Tcl 中采用两步法,因为它的正则表达式不允许在同一个组中存储多个捕获,并且它不支持 \G 运算符。

这是最终的解决方案:

set text {Wed Aug 30 14:47:11.435
EDT Interface : p16,
Value Count : 9 References : 1, Internal : 0x1
Values : 148, 365, 366, 367, 371
120577, 120578, 120631, 120632}

set pattern {\sValues\s*:\s*\d+(?:[\s,]*\d+)*}
regexp $pattern $text match
if {[info exists match]} {
set results [regexp -all -inline {\d+} $match]
puts $results
} else {
puts "No match"
}

参见 Tcl demo打印 148 365 366 367 371 120577 120578 120631 120632

详情

第一个匹配 运算符提取以Values 开头然后以逗号或空格分隔的数字的子字符串:

  • \s - 一个空格
  • Values - Values
  • \s*:\s* - 用 0+ 个空格括起来的冒号
  • \d+ - 一位或多位数字
  • (?:[\s,]*\d+)* - 0+ 个空格或逗号后跟 1+ 个数字的 0+ 个序列。

第二步是使用 regexp -all -inline {\d+} $match 提取所有 1+ 数字 block 。

关于regex - 使用正则表达式提取多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45968165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com