如何使用gsub
刪除前24個字符?如何使用gsub從日誌中刪除前24個字符?
2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN.
我想只有以下:
[DEBUG] Rector: Common\BasePage, OnInit BEGIN
如何使用gsub
刪除前24個字符?如何使用gsub從日誌中刪除前24個字符?
2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN.
我想只有以下:
[DEBUG] Rector: Common\BasePage, OnInit BEGIN
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."
這通過gsub
刪除前24個字符。
'2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN.'.gsub(/\A.{24}/, '')
# => "[DEBUG] Rector: Common\\BasePage, OnInit BEGIN."
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"
請閱讀「[問]」。我們希望看到您解決問題的努力,但看起來您希望我們爲您編寫代碼。另外,爲什麼它必須是'gsub'?有更好的方法來做到這一點。 http://stackoverflow.com/q/3614389/128421是密切相關的。 –