繁体   English   中英

使用RegExp(Ruby)从HTML标签提取字符串

[英]Extract string from HTML tags using RegExp (Ruby)

我想从字符串<h1>test</h1><div>toast</div>提取“ toast”。 什么正则表达式可以隔离这样的字符串?

编辑:感谢纠正格式的用户。

更多信息:始终只有div标签的一个实例,内部信息可能会更改,但同一字符串中永远不会再有另一个div标签(该字符串大于给定的样本)

谢谢!

您可以使用Nokogiri

require 'nokogiri'

doc = Nokogiri::HTML::Document.parse("<div> test </div> <div> toast </div>")
doc.css('div').map(&:text)
# => [" test ", " toast "]

require 'nokogiri'

doc = Nokogiri::HTML::Document.parse("<h1>test</h1><div>toast</div>")
doc.at_css('div').text
# => "toast"

我们需要更多信息。 如果字符串恰好是"<h1>test</h1><div>toast</div>" ,则类似天真

regex = /<h1>test<\/h1><div>([^<]*)<\/div>/
found = "<h1>test</h1><div>toast</div>".match(regex)[1]
# => "toast"

会工作。 我目前的最佳猜测是您期望

<h1>*</h1><div>*</div>

然后使用这个:

regex = /<h1>[^<]*<\/h1><div>([^<]*)<\/div>/
found = "<h1>any string can go here</h1><div>toast</div>".match(regex)[1]
# => "toast"

请注意,如果任一标签中有任何嵌套元素,则此操作将中断。 一个更强大的解决方案是使用Nokogiri。 和你老板谈谈。

实际上,这不是正则表达式通常要做的事情……并且有充分的理由,但是如果您必须且由于您说过,其中的div不会超过一个……这应该对您有用:

(?<=<div>).*(?=</div>)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM