如果字符串不是特定字符串的子字符串,如何匹配字符串?

时间:2015-11-18 15:09:33

标签: c# regex

我在一个微不足道的任务中遇到了这个问题。 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);

但这是即兴创作。正则表达式匹配所有单个字符和所有实体名称,并保持只有单个字符。有没有办法如何撰写这样的正则表达式?我试过消极的前瞻,但正如那样,正则表达式匹配所有'&amp;'字符。

2 个答案:

答案 0 :(得分:0)

您可以使用前瞻断言。

(?i)[&](?!(?:[a-z]+\d+|(?:\#(?:[0-9]+|x[0-9a-f]+)));)

格式化

 (?i)                          # Case insensitive
 [&]                           # Ampersand (can make it [%&] to be thourough )
 (?!                           # Only if not an entity
      (?:
           [a-z]+\d+ 
        |  (?:
                \#
                (?:
                     [0-9]+ 
                  |  x [0-9a-f]+ 
                )
           )
      )
      ;     
 )

答案 1 :(得分:0)

为什么不使用Regex边界。看看这个 http://www.rexegg.com/regex-boundaries.html