仅提取一行中方括号之间的第一个匹配项

时间:2019-07-29 07:06:17

标签: regex ruby

我只想提取给定行中方括号之间的值。 从文字

TID: [-1] [] [2019-07-29 10:18:41,876]  INFO

我想提取方括号之间的第一个匹配点,即 -1 。 我尝试使用

(?<Ten ID>((^(?!(TID: )))*((?<=\[).*?(?=\]))))

但是它给出了

-1, ,2019-07-29 10:18:41,876

作为结果匹配。

如何仅捕获第一次出现的事件?

您可以访问正则表达式编辑器here

3 个答案:

答案 0 :(得分:1)

str = “TID:] [-1] [] [2019-07-29 10:18:41,876]  INFO”

i1 = str.index(‘[‘)
  #=> 6
i2 = str.index(‘]’, i1+1)
  #=> 9
i1.nil? || i2.nil? ? nil : str[i1+1..i2-1]
  #=> “-1”

答案 1 :(得分:0)

您可以使用捕获组来捕获第一个事件:

\ATID: \[([^\[\]]+)\]

答案 2 :(得分:0)

您可以使用

\bTID:\s*\[([\d-]+)]

请参见Rubular demo

Ruby demo

s="TID: [-1] [] [2019-07-29 10:18:41,876]  INFO "
puts s[/\bTID:\s*\[([\d-]+)]/, 1]
# => -1