【发布时间】:2015-11-20 14:25:17
【问题描述】:
我在一项微不足道的任务中遇到了这个问题。 HTML 文本不应包含字符 '' 和 '&'。第三个对我来说是个谜。我想使用正则表达式来查找所有 '&' 字符,但这个字符可以包含在实体名称中,即 & 可以包含。所以我对正则表达式的要求是找到所有不包含在格式 &[a-z]; 中的'&'。我不是正则表达式大师,所以我想出的最佳解决方案是这个正则表达式:
Regex _allAmps = new Regex("((&[a-z]*;))|[&]", RegexOptions.Compiled | RegexOptions.IgnoreCase));
...
List<Match> invalidChars.AddRange(_allAmps.Matches(htmlText).Cast<Match>.Where()m => m.Value.Lenght == 1);
但这是即兴创作。正则表达式匹配所有单个字符和所有实体名称,并保留仅单个字符。有没有办法编写这样的正则表达式?我尝试了否定前瞻,但这样正则表达式匹配所有 '&'chars。
【问题讨论】:
-
你为什么不解码你得到的 HTML 并匹配普通的纯文本呢?您正在使用什么解析器(如果有)?另外,看看this answer of mine: Complete HTML Strip function。
-
就HtmlEncode吧。
-
嗯,这个问题不是关于 HTML 本身,而是主要关于正则表达式。我认为一切都可以通过正则表达式完成,所以我很好奇如何做这样的事情。
-
如果您对任何特定内容感兴趣,请发帖MVCE (minimal complete verifiable example)。此外,您的代码包含拼写错误:
m.Value.Lenght和Cast<Match>必须是Cast<Match>()我猜,并且存在 mor 问题。你知道,如果你愿意,我们也可以发布一个“即兴创作”的答案:) -
你不认为答案只是
&(?!\w*;)吗?