我想使用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。)
答案 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