我正在尝试使用Ruby只用一个<br>
标记替换多个连续的<br>
标记。
例如:
Hello
<br><br/><br>
World!
会变成
Hello
<br>
World!
答案 0 :(得分:4)
你可以使用正则表达式执行此操作,例如:
"Hello\n<br><br/><br>\nworld".gsub(/(?im)(<br\s*\/?>\s*)+/,'<br>')
要解释一下:(?im)
部分有选项,表明匹配应该不区分大小写,.
应匹配换行符。分组表达式(<br\s*\/?>\s*)
匹配<br>
(可选地带有空格和尾随/
)可能后跟空格,而+
表示匹配该组中的一个或多个。 / p>
但是,我应该指出,通常使用正则表达式来操作HTML并不是一个好主意 - 你应该使用正确的解析器。例如,这是使用Nokogiri执行此操作的更好方法:
require 'nokogiri'
document = Nokogiri::HTML.parse("Hello
<br><br/><br>
World!")
document.search('//br').each do |node|
node.remove if node.next.name == 'br'
end
puts document
这将产生如下输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Hello
<br>
World!</p></body></html>
(解析器将您的输入转换为格式良好的文档,这就是您拥有DOCTYPE并附上<html><body><p>
标记的原因。)