Ruby如何使用正则表达式替换字符串的一部分和可选的附加部分

Ruby如何使用正则表达式替换字符串的一部分和可选的附加部分,ruby,regex,string,Ruby,Regex,String,我正在解析日志文件中的字符串,其格式如下: [info]这里写的东西 或 [info]-这里写的东西 在这两种情况下,我都需要返回: 这里写的东西 -是我正在解析的日志的可选添加项 我希望有一个正则表达式在两种情况下得到相同的结果 我试过: line = "[info] - something written here" line.gsub('[info] ',"") 导致 -这里写的东西 如何摆脱可选的- line1 = "[info] something written here" li

我正在解析日志文件中的字符串,其格式如下:

[info]这里写的东西

[info]-这里写的东西

在这两种情况下,我都需要返回:

这里写的东西

-
是我正在解析的日志的可选添加项

我希望有一个正则表达式在两种情况下得到相同的结果

我试过:

line = "[info] - something written here"

line.gsub('[info] ',"")
导致

-这里写的东西

如何摆脱可选的
-

line1 = "[info] something written here"
line2 = "[info] - something else written here"

line1.gsub(/\[info\] (- )?/,"") #=> "something written here""
line2.gsub(/\[info\] (- )?/,"") #=> "something else written here"
  • 您需要使用正则表达式而不是
    字符串执行
    gsub
  • 反斜杠添加到
    \[
    \]
    以使用文字字符,而不是作为正则表达式字符集的括号
  • 使捕获组成为可选组

你也可以考虑让这个模式更通用——比如说“代码>/\[nb] [-] *//<代码> < /p>我已经尝试过了,但是没有执行IRB(main):164:0>行=“[nFi] -某物”IRB(main):163:0>Lo.gSub(‘([fI](-)”,“$”)= >“[信息] -某物”,我会这样写:<代码>/\[s*iFun\s*\]。\s*\-?\s*/因为人们经常在格式上变得马虎。@SagarPandya你可以,但我不明白为什么你会。这是一个更复杂、效率更低的解决方案。例如:

line.slice(/\[info\](.*)/,2)
@SagarPandya Ruby和大多数其他语言不支持非确定性(可变长度)向后看。所以这不起作用:
line.slice(/(?您不需要
gsub
。使用
sub
\[info\][-]*