2016-08-04 56 views
-1

如何使用gsub删除前24个字符?如何使用gsub从日志中删除前24个字符?

2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN. 

我想只有以下:

[DEBUG] Rector: Common\BasePage, OnInit BEGIN 
+1

请阅读“[问]”。我们希望看到您解决问题的努力,但看起来您希望我们为您编写代码。另外,为什么它必须是'gsub'?有更好的方法来做到这一点。 http://stackoverflow.com/q/3614389/128421是密切相关的。 –

回答

2
line = "2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN." 

要第一[之前删除一切:

# Note the use of #sub instead of #gsub, as it will only match once 
line.sub /\A[^\[]*/, '' 
# => "[DEBUG] Rector: CommonBasePage, OnInit BEGIN." 

您还可以使用正则表达式指数得到的一切,从第一个[

line[/\[.*/] 
# => "[DEBUG] Rector: CommonBasePage, OnInit BEGIN." 

如果您知道时间戳前缀始终是24个字符长,使用切片:

line[24..-1] 
# => "[DEBUG] Rector: CommonBasePage, OnInit BEGIN." 
0

这通过gsub删除前24个字符。

'2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN.'.gsub(/\A.{24}/, '') 
# => "[DEBUG] Rector: Common\\BasePage, OnInit BEGIN." 
2

gsub是不是真的在一个字符串的开始删除n个字符一个不错的选择。您应该简单地提取字符并继续前进,而不是进行搜索并替换掉字符。

删除字符的最简单方法是分配给一个字符串切片:

str = 'foo bar' 
str[0, 4] = '' 
str # => "bar" 

或者,也可以切片,并从字符串提取字符:

str = 'foo bar' 
str[4 .. -1] # => "bar" 

如果你想慢你的代码,因为你发现你没有使用足够的CPU时间,你可以使用正则表达式:

str = 'foo bar' 
str[/^.{4}(.+)/, 1] # => "bar" 

如果使用gsub坚持

str = 'foo bar' 
str.gsub(/^.{4}/, '') # => "bar" 

然而,使用gsub因为这是没有那么快,或有效率,因为sub这将做同样的:

str = 'foo bar' 
str.sub(/^.{4}/, '') # => "bar" 
相关问题