如何使用gsub
删除前24个字符?
2016-08-03 09:49:07,701 [DEBUG] Rector: Common\BasePage, OnInit BEGIN.
我只想要以下内容:
[DEBUG] Rector: Common\BasePage, OnInit BEGIN
答案 0 :(得分: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."
答案 1 :(得分: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"
答案 2 :(得分: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."