Регулярное выражение для помещения выравнивания в тег <td> - PullRequest
2 голосов
/ 13 февраля 2010

У меня есть HTML-файл, который мне нужен, чтобы взять любой тег и поместить в него align = 'left'.

Итак, с учетом строки:

  <td><img alt="" src="oooh.html_files/px" style="width: 20px; height: 1px;"/></td>

Мне нужно это сделать:

  <td align='left'><img alt="" src="oooh.html_files/px" style="width: 20px; height: 1px;"/></td>

Если он уже указывает выравнивание, мне нужно просто оставить это. Итак, учитывая строку:

  <tr><td width="50%">&nbsp;</td><td align="center">

Мне нужно это сделать:

  <tr><td width="50%" align='left'>&nbsp;</td><td align="center">

Обратите внимание, что он помещает выравнивание в первый тд, но игнорирует второй, потому что это уже определяет выравнивание.

Возможно ли это сделать в Ruby с регулярными выражениями?

Я знаю, что на самом деле не стоит использовать регулярные выражения с html ... но, по сути, я просто после быстрого взлома, чтобы преодолеть ошибку в другой библиотеке. Надеюсь, эта ошибка будет исправлена ​​в ближайшее время, и мне не нужно беспокоиться об этом! :)

Ответы [ 2 ]

4 голосов
/ 13 февраля 2010
#!/usr/bin/env ruby
require 'nokogiri'

doc = Nokogiri::XML('<tr><td width="50%">&nbsp;</td><td align="center"></tr>')

(doc / '//td[not(@align)]').each {|td| td['align'] = 'left' }

puts doc
# <?xml version="1.0"?>
# <tr>
#   <td width="50%" align="left"/>
#   <td align="center"/>
# </tr>

Смотри, ма! Нет регулярных выражений!

Это буквально однострочник, если вы не беспокоитесь о регулярных выражениях.

2 голосов
/ 13 февраля 2010

Часто задаваемый ответ: регулярные выражения не могут анализировать HTML; используйте библиотеку HTML для разбора, которой достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...