From: Andrew Timberlake Date: 2009-04-19T14:31:48+09:00 Subject: Re: String replacing help On Sun, Apr 19, 2009 at 6:59 AM, Jeremy Woertink wrote: > I'm working with Mechanize doing some screen scraping. Because of the > project, I have to use an older version of Mechanize for now, I'm using > 0.8.4. > > The goal of what I'm trying to do is take a string and insert pipes '|' > before words that are *not* inside of . > > I have: >>> template_body.class > => Hpricot::Elements >>> template_body.to_html > => "
 document.f6.submit();\" onMouseOut=\"window.status='';\"
> title=\"Select\" onMouseOver=\"window.status='Select'; return
> true;\">HEAD \n   href=\"javascript:document.f6.SLID.value='F37'; document.f6.submit();\"
> onMouseOut=\"window.status='';\" title=\"Select\"
> onMouseOver=\"window.status='Select'; return true;\">TITLE  href=\"javascript:document.f6.SLID.value='F38'; document.f6.submit();\"
> onMouseOut=\"window.status='';\" title=\"Select\"
> onMouseOver=\"window.status='Select'; return true;\">\"test\"\n href=\"javascript:document.f6.SLID.value='F39'; document.f6.submit();\"
> onMouseOut=\"window.status='';\" title=\"Select\"
> onMouseOver=\"window.status='Select'; return true;\">BODY \n
>  document.f6.submit();\" onMouseOut=\"window.status='';\"
> title=\"Select\" onMouseOver=\"window.status='Select'; return
> true;\">DIV id  href=\"javascript:document.f6.SLID.value='F41'; document.f6.submit();\"
> onMouseOut=\"window.status='';\" title=\"Select\"
> onMouseOver=\"window.status='Select'; return true;\">\"main-div\"\n
>  document.f6.submit();\" onMouseOut=\"window.status='';\"
> title=\"Select\" onMouseOver=\"window.status='Select'; return
> true;\">CSS-WITH-LINK destination  href=\"javascript:document.f6.SLID.value='F43'; document.f6.submit();\"
> onMouseOut=\"window.status='';\" title=\"Select\"
> onMouseOver=\"window.status='Select'; return true;\">TO  href=\"javascript:document.f6.SLID.value='F44'; document.f6.submit();\"
> onMouseOut=\"window.status='';\" title=\"Select\"
> onMouseOver=\"window.status='Select'; return true;\">:index\n
>  document.f6.submit();\" onMouseOut=\"window.status='';\"
> title=\"Select\" onMouseOver=\"window.status='Select'; return
> true;\">IMAGE source  href=\"javascript:document.f6.SLID.value='F46'; document.f6.submit();\"
> onMouseOut=\"window.status='';\" title=\"Select\"
> onMouseOver=\"window.status='Select'; return
> true;\">RENDER image  href=\"javascript:document.f6.SLID.value='F47'; document.f6.submit();\"
> onMouseOut=\"window.status='';\" title=\"Select\"
> onMouseOver=\"window.status='Select'; return true;\">@image\n
> max-height  document.f6.submit();\" onMouseOut=\"window.status='';\"
> title=\"Select\" onMouseOver=\"window.status='Select'; return
> true;\">m-h\n
" > > > The words I'm trying to insert the pipe before have a non-breaking space > tags around them. I had it working where I can iterate through > everything and return a new string, but I end up losing all line breaks > and non-breaking spaces using > >  new_body = '' >      template_body.to_html.split(" ").each do |el| >        el.split("\n").each do |e| >          unless e.empty? or e =~ /<\/?[^>]*>/ >            e = '|' + e >          end >        end >        new_body += el >      end > > > Any ideas? > > Thanks, > ~Jeremy > -- > Posted via http://www.ruby-forum.com/. > > Does this work?: in_a = false result = "" s.scan(/<[^>]+>|[^<]+/).each do |e| if e =~ /