are you sure they're not calibre's smart quotes? it would be easier if they were because then you wouldn't have the conflict with the classes/ids.
you could try this, but it may just end up causing more problems than it's worth. maybe saves you a bit of time?
Code:
find:
(?s)(<p[^>]*>)([^"]+".+)</p>\s+?<p[^>]*>([^"]+")
repl:
\1\2 <----- trailing white space