我有一个字符串包含(实际上没有换行符)
<td class="coll-1 name">
<a href="/sub/48/0/" class="icon"><i class="flaticon-divx"></i></a>
<a href="/torrent/2349324/some-stuuf-here/">SAME stuff here</a>
<span class="comments"><i class="flaticon-message"></i>1</span>
</td>
我想要一个数组来存储使用href="
和/">
分割的字符串。我怎样才能做到这一点。我试过这个。
new_array=my_string.split(/ href=" , \/">/)
修改
.split(/href="/)
这样做太好了,但与其他部分没有关系。
.split(/\/">/)
同样这也有效但我无法将它们组合成一行。
答案 0 :(得分:2)
鉴于此字符串:
string = <<-HTML
<td class="coll-1 name">
<a href="/sub/48/0/" class="icon"><i class="flaticon-divx"></i></a>
<a href="/torrent/2349324/some-stuuf-here/">SAME stuff here</a>
<span class="comments"><i class="flaticon-message"></i>1</span>
</td>
HTML
并假设正确的链接是没有icon
类的链接,您可以使用CSS选择器a:not(.icon)
,例如通过Nokogiri:
require 'nokogiri'
doc = Nokogiri::HTML::DocumentFragment.parse(string)
doc.at_css('a:not(.icon)')[:href]
#=> "/torrent/2349324/some-stuuf-here/"
答案 1 :(得分:1)
你可以利用 lookahead 和 lookbehind ,如下所示:
my_string.scan(/(?<=href=").*(?=\/">)/)
#=> ["/torrent/2349324/some-stuuf-here"]
这将返回一个数组,其中所有出现的href=" ... /">
只有...
部分(可以是任何字符串)。
或者您可以获取与href=".../">
匹配的所有内容,然后删除href="
和结尾/">
,如下所示:
my_string.scan(/(?:href=".*\/">)/).map { |e| e.gsub(/(href="|\/">)/, "") }
#=> ["/torrent/2349324/some-stuuf-here"]
这将返回与/href=".*\/">/
匹配的所有实例的数组。
如何使用正则表达式使用2个关键字进行拆分
您可以使用|
表示正则表达式中的或,如下所示:
my_string.split(/(?:href="|/">)/)