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\][-]*
?