如何使用正则表达式提取时间戳

时间:2017-03-21 14:35:28

标签: ruby regex fluentd

我需要从[02/24/2016][03:37:27.996]中提取时间戳。

例如,匹配:

[02/24/2016][03:37:27.996] 

应提取:

02/24/2016 03:37:27.996

分别返回日期和时间:

\[(?<date>[^\]]*)\]\[(?<time>[^\]]*)\]

这是Rubular example,供您轻松参考。

我正在寻找如何将这两个组(日期和时间)组合成一个时间戳。

1 个答案:

答案 0 :(得分:1)

由于正则表达式的工作方式,您无法使用模式将信息提取为一个结果或字符串。您将获得两次捕获:

UPDATE A
SET [Miktar] = B.[Miktar]
FROM [Retail].[dbo].[tb_StokDurum] A INNER JOIN 
 (SELECT DISTINCT [UrunID], SUM([Miktar]*-1) AS [Miktar]
 FROM [Retail].[dbo].[tb_SatisDetay]
 GROUP BY [UrunID]) B
ON (A.UrunID = B.[UrunID] AND В.Depo = (SELECT TOP 1 Depo FROM [Retail].[dbo].[tb_StokDurum] WHERE Depo != 'AZ01' AND Depo != '0')) 
你可以使用

'[02/24/2016][03:37:27.996]'.match(/\[([^\]]+)\]\[([^\]]+)\]/).captures # => ["02/24/2016", "03:37:27.996"]

或包含干预'[02/24/2016][03:37:27.996]'.match(/\[([^\]]+)\]\[([^\]]+)\]/).captures.join(' ') # => "02/24/2016 03:37:27.996" 字符的一个捕获:

"[]"

你可以通过其他方式做到:

'[02/24/2016][03:37:27.996]'.match(/\[([^\]]+\]\[[^\]]+)\]/).captures # => ["02/24/2016][03:37:27.996"]

,使用简单的切片和'[02/24/2016][03:37:27.996]'[1..-2].sub('][', ' ') # => "02/24/2016 03:37:27.996" ,我就是这样做的,或者:

sub

当人们了解正则表达式时,一切看起来都是使用它们的绝佳机会,一切都是用正则表达式锤子解决问题的机会。不幸的是,这并不接近事实。它们功能强大,但如果使用不当,它们会降低代码速度,它们会引入非常微妙的错误和逻辑漏洞,并且它们会使代码更难调试,因为随着它们变得越来越复杂,它们也会变得更加复杂。保持它们的简洁性,或者学习如何使用为您组装它们的代码生成它们。