0

我的文字如下:

<font size=+2 color=#F07500><b> [ba]</font></b>
<ul><li><font color =#0B610B> Word word wordWord word.<br></font></li></ul>
<ul><li><font color =#F07500> Word word word.<br></font></li></ul>
<ul><li><font color =#0B610B> Word word word wordWord.<br></font></li></ul>
<ul><li><font color =#0B610B> WordWord.<br></font></li></ul>
<br><font color =#E41B17><b>UPPERCASE LETTERS</b></font> 
<ul><li><font color =#0B610B> Word word wordWord word.<br></font><br><font color =#E41B17><b>PhD and dataBase</b></font> </li></ul>
<font color =#0B610B> Word word word.<br></font></li></ul><dd><font color =#F07500>     »» Word wordWord word.<br></font>

在每个<font color =#0B610B>...</font>. 例如:

<font color =#0B610B> Word word wordWord word.<br></font>

我想通过按如下方式拆分它们来纠正这个错误(即:在它们之间添加一个冒号和一个空格):

<font color =#0B610B> Word word word: Word word.<br></font>

到目前为止,我一直在使用:

(<font color =#0B610B\b[^>]*>)(.*?</font>)

选择 的每个实例<font color =#0B610B>...</font>,并且在逐个查找<font color =#0B610B>...</font>.

但是当我使用:

(<font color =#0B610B\b[^>]*>)(.*?[a-z])([A-Z].*?</font>)

无论其他字体颜色标签如何,它都会找到但会选择<font color =#0B610B>...</font>一行之间的所有内容,并替换其他不需要的实例。

我希望它找到并替换每个特定标签对中的错误:<font color =#0B610B>...</font>,而不是抓住从开始到<font color =#0B610B>结束的所有内容</font>

有没有正则表达式可以解决这个问题?提前谢谢了。

4

1 回答 1

1

一般来说,正则表达式不是解析 HTML 的好主意(如果它是一次性的,你可能还可以)。

我认为这可能是您的正则表达式不起作用的原因。你能举一个你的正则表达式失败的例子吗?

我能想到的一种情况是,如果[a-z][A-Z]匹配对中没有匹配 () <font color=#0B610B></font>,但相邻的<font></font>. 例如:

<font color=#0B610B>word word</font><font color=#000000>word wordWord</font>

在这种情况下,唯一有效的匹配是<font color=#0B610B>word word</font><font color=#000000>word word和 string 的其余部分Word</font>,所以这就是正则表达式匹配的内容(因为如果它可以匹配它!)

我可以想到一个粗略的解决方法,但我不会推荐它,除非这个任务是一次性的,因为对 HTML 使用正则表达式总是容易出现这样的错误!这个正则表达式也非常低效。尝试(未经测试):

(<font color =#0B610B\b[^>]*>)(([^<]|<(?!/font))*?[a-z])([A-Z].*?</font>)

它说,“查找<font colour=xxxx>标签,后跟< 跟的尖括号/font,或其他任何东西,然后再跟[a-z][A-Z]”。所以它试图确保匹配不会</font>越界。

于 2012-01-08T07:24:06.147 回答