Удаление элемента Nokogiri с помощью регулярных выражений в Ruby

Кажется, это самая сложная проблема, с которой я когда-либо сталкивался, но, возможно, я делаю ее сложнее, чем нужно. Мне нужно удалить неизвестное количество вложенных элементов, которые могут быть или не быть в начале предложения. Элементы span содержат ряд слов в круглых скобках. Итак, в предложении:

(криптография, сленг) Интернет-брандмауэр.

(криптография, сленг) выглядит так:

<span class="ib-brac"><span class="qualifier-brac">(</span></span><span class="ib-content"><span class="qualifier-content">cryptography<span class="ib-comma"><span class="qualifier-comma">,</span></span> <a href="/wiki/Appendix:Glossary#slang" title="Appendix:Glossary">slang</a></span></span><span class="ib-brac"><span class="qualifier-brac">)</span></span>

Я думал, что хорошим решением было бы использовать регулярное выражение и nokogiri, чтобы проверить, существует ли первый '(' или нет, и если он существует, удалить все интервалы до тех пор, пока не будет достигнуто закрытие ')', но я понятия не имею, как это сделать это. Решение, которое я использую сейчас, не учитывает переменное количество интервалов:

if definition.inner_html =~ /^<span class/
  definition.search("span")[0..4].each do |span|
    span.remove
  end  
end

person TenJack    schedule 20.01.2010    source источник
comment
Я думаю, вы должны попытаться лучше объяснить, чего вы пытаетесь достичь, вместо того, чтобы сразу предлагать метод. Я понимаю вашу проблему в том, что у вас есть строка с подстрокой в ​​круглых скобках, и вы хотите удалить ее вместе со всеми заключенными SPAN.   -  person Mladen Jablanović    schedule 20.01.2010


Ответы (1)


Не уверен на 100%, что вы пытаетесь сделать, но приведенный выше код может удалить переменное количество интервалов, если вы просто пропустите индекс:

if definition.inner_html =~ /^<span class/
  definition.search("span").each do |span|
    span.remove
  end
end  
person jn80842    schedule 20.01.2010