使用正则表达式在Ruby中提取子字符串

时间:2016-05-16 05:21:22

标签: ruby logstash

如何从字符串中提取子字符串作为Ruby中的字段名?

输出示例:

A-field:name.23.134 => 6

ruby {
        code => "

             if key =~ /^A-field:[A-Za-z]+/ then
                     #how to get the match pattern ?and the field value ?                     

               end


}

如何将匹配模式作为字段anme和字段值, 过滤后,它看起来像

A-field:name => 6

2 个答案:

答案 0 :(得分:1)

问题不明确,但假设如下,
1.字符串的形式为(field1).numbers_to_ignore => number_to_capture

你试试这个。

string = "A-field:name.23.134 => 6"
matchdata = string.match /(?<field1>[^.]*).*(?<field2>=>.*)/
matchData[1]
>> "A-field:name" # same result as matchData["field1"]
matchData[2]
>> "=> 6"  # same result as matchData["field2"]

或以更简单的形式,你可以像这样使用正则表达式

/([^.]*).*(=>.*)/
除了字段名称之外,

仍然提供相同的输出。

第一个括号在&#39; =&gt;&#39;之前捕获除点之外的所有字符。字符。然后,第二个括号捕获以&#39; =&gt;&#39;开头的所有字符。

希望这会有所帮助。

答案 1 :(得分:0)

这是一个正则表达式,它将分别检索字段名称和值:

text = "A-field:name.23.134 => 6"
matches = text.match(/([^:]+:[^=\.\s]+)(\.\d+)*\s*=>\s*(.+)/)
puts "Field: #{matches[1]}"
puts "Value: #{matches[3]}"
puts "#{matches[1]} => #{matches[3]}"

这个输出是:

Field: A-field:name
Value: 6
A-field:name => 6