2016-08-04 55 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" 
相關問題