使用Ruby正则表达式删除子字符串

时间:2018-06-15 09:03:04

标签: ruby regex

我想使用Ruby的sub(pattern, replacement)从多行子字符串中删除last-lrm-refresh=<value>形式的行。以下是整个字符串的示例:

       maintenance-mode=true \
       last-lrm-refresh=1523448810 \
       no-quorum-policy=stop

以下内容不太有效:

s.sub(' \\\n[ \t]+last-lrm-refresh=[0-9]+', '')

当我在交互式正则表达式编辑器(例如Rubular)中尝试相同的正则表达式时,它工作正常,所以我猜问题是关于转义字符。

正则表达式的正确形式是将字符串传递给sub以达到预期效果?我尝试了一些“排列”但到目前为止没有成功。 (我之前也尝试过使用Perl的similar。)

1 个答案:

答案 0 :(得分:2)

如果您要删除,如果您删除行而不是正则表达所有内容,则可能更容易支持:

input = "maintenance-mode=true
       last-lrm-refresh=1523448810
       no-quorum-policy=stop"
input.split($/).reject do |line|
  line.strip.start_with?("last-lrm-refresh=")
end.join($/)
#⇒ maintenance-mode=true
#  no-quorum-policy=stop

或者,Ruby 2.4+更容易,@ Stefan

input.each_line.grep_v(/(^\s*last-lrm-refresh=)/).join