正则表达式 - 允许字符,除非某个字符在字符串的一部分之前?

时间:2017-02-16 20:54:41

标签: c# regex

我不知道这是否可以使用正则表达式,但这是场景。我匹配的字符串是空格分隔的列表(HTML类)。如果每个单词使用小写的a-z,空格和/或0-9,则字符串应匹配,除非单词以@开头。

理想的结果:

red-one green-two blue-three =匹配的 redOne green-two blue-three =不匹配(找到大写字母)
red-one blue-two @greenThree =匹配(找到大写字母,但单词以@开头)

有什么想法吗?我认为这是不可能的,但也许是一个大师知道。

1 个答案:

答案 0 :(得分:1)

您应该能够使用以下表达式来处理该场景,该场景基本上处理" word" level并确保每个单词都有一个可选的尾随空格(以处理空格分隔):

^((@[a-zA-Z-]+|([a-z-])+)\s?)+$

这基本上包括两个主要条件:

  • @[a-zA-Z-]+
    • 此部分允许一组字符包含大写字母,如果以' @'开头。字符。
  • [a-z-])+
    • 此部分是您正常的"用例,它只匹配包含小写和连字符的一系列字符。

这两个条件都允许在每个集合之后有一个可选的尾随空格字符,这将允许每个单词"在您的列表中进行单独评估。

示例

enter image description here

var tests = new []{ 
    "red-one green-two blue-three", 
    "redOne green-two blue-three",
    "red-one blue-two @greenThree"
};

foreach(var test in tests)
{
    var regex = new Regex(@"^((@[a-zA-Z-]+|([a-z-])+)\s?)+$");
    Console.WriteLine(regex.IsMatch(test));
}