如何用正则表达式将连续3个及以上<br />替换为2个?
问题:批量替换连续3个及以上的
<br />为2个 我需要把字符串里3个及以上连续的<br />替换成2个<br />。之前用正则e{2,}能把连续2个及以上的字母e替换成星号,但试了下面几个正则处理<br />都失败了:
Dim strInput As String = "Thee <br /><br /><br /> brown fox jumped over the lazy dog." Label1.Text = Regex.Replace(strInput, "\b<br />{2,}\b", "*") Label1.Text = Regex.Replace(strInput, "\b<br />\b{2,}", "*") Label1.Text = Regex.Replace(strInput, "\b<br />\b {2,}", "*")
解决方案
方法一:直接用正则匹配处理
你之前的问题出在\b的使用上——\b是单词边界,<br />里的<、>等符号不属于单词字符,这个边界匹配会失效,导致正则找不到目标内容。
正确的正则应该直接匹配连续2次及以上的<br />,然后替换成固定的2个<br />(这样3个及以上的连续标签都会被压缩成2个):
Dim strInput As String = "Thee <br /><br /><br /> brown fox jumped over the lazy dog." Label1.Text = Regex.Replace(strInput, "(<br />){2,}", "<br /><br />")
方法二:占位符中转处理
如果觉得直接写正则匹配HTML标签容易出错,可以用占位符中转:先把所有<br />换成一个唯一标识,处理连续重复后再替换回去:
Dim strInput As String = "Thee <br /><br /><br /> brown fox jumped over the lazy dog." ' 1. 替换所有<br />为占位符 Dim tempStr As String = strInput.Replace("<br />", "[HTML-Linebreak]") ' 2. 把连续2个及以上的占位符替换成2个 tempStr = Regex.Replace(tempStr, "(\[HTML-Linebreak\]){2,}", "[HTML-Linebreak][HTML-Linebreak]") ' 3. 替换回<br /> Label1.Text = tempStr.Replace("[HTML-Linebreak]", "<br />")
内容的提问来源于stack exchange,提问作者user1946932
相关产品推荐
相关产品推荐

