这是问题所在。我有一块粘贴的HTML文本。我需要从文本中删除尾随换行符和空格。甚至通过关闭标签继续进行。下面的文字只是一个例子,实际上代表了我正在处理的真实文本。
EG:
:此:
<span>Here is some<br></span><br>
<span><span>Here is some text</span><br><span><br> </span></span><br><br>
成为这样:
<span>Here is some<br></span><br>
<span><span>Here is some text<span></span></span>
我的第一次通过。我使用它:Regex.Replace(htmlString, @"(?:\<br\s*?\>)*$"
,“”)来摆脱尾随换行符。现在我剩下的就是在关闭标签和空白区域后面的换行符。
我正在尝试使用它:
While(Regex.IsMatch(@"(<br>|\s| )*(<[^>]*>)*$")
{
Regex.Replace(htmlString, @"(<br>|\s| )*(<[^>]*>)*$", $2)
}
正则表达式模式实际上工作得很好,问题是匹配组2的替换只返回一个结束跨度。所以我最终得到了以下内容:
<span>Here is some<br></span><br>
<span><span>Here is some text</span></span>
答案 0 :(得分:0)
答案 1 :(得分:0)
正则表达式位于@"(<br>|\s| )*(<[^>]*>)*$"
。第二组之后是*
,意味着该组被重复,因此$2
只会产生一次重复的组。
将重复放在一个组中将捕获整个重复。将正则表达式更改为@"(<br>|\s| )*((<[^>]*>)*)$"
。
请注意,使用*
重复第一个组可能会使代码在某些输入字符串上旋转,因为无法保证Replace
会将文本更改为其他字符串。由于第一组是可选的(即零个或多个重复),Replace
可能会用完全相同的字符串替换一个字符串。所以我建议将正则表达式更改为@"(<br>|\s| )+((<[^>]*>)*)$"
,这意味着需要出现第一组的一个或多个。