C# 正则表达式-允许字符,除非某个字符位于字符串的某个部分之前?
我不知道这在正则表达式中是否可行,但下面是一个场景。我匹配的字符串是以空格分隔的列表(HTML类)。如果每个单词使用小写字母a-z、空格和/或0-9,则字符串应匹配,除非该单词以@开头 理想结果:C# 正则表达式-允许字符,除非某个字符位于字符串的某个部分之前?,c#,regex,C#,Regex,我不知道这在正则表达式中是否可行,但下面是一个场景。我匹配的字符串是以空格分隔的列表(HTML类)。如果每个单词使用小写字母a-z、空格和/或0-9,则字符串应匹配,除非该单词以@开头 理想结果: 红一绿二蓝三=匹配 重做绿色两个蓝色三个=不匹配(找到大写字母) red-one-blue-two@greenThree=匹配(找到一个大写字母,但单词以@开头) 有什么想法吗?我认为这是不可能的,但也许一位大师知道。您应该能够使用以下表达式来处理该场景,该场景将基本上处理“单词”级别的匹配,只需确保
红一绿二蓝三
=匹配重做绿色两个蓝色三个
=不匹配(找到大写字母)red-one-blue-two@greenThree
=匹配(找到一个大写字母,但单词以@开头)
有什么想法吗?我认为这是不可能的,但也许一位大师知道。您应该能够使用以下表达式来处理该场景,该场景将基本上处理“单词”级别的匹配,只需确保每个单词都有一个可选的尾随空格(以空格分隔的方式处理): 这基本上包括两个主要条件:
@[a-zA-Z-]+
- 如果一组字符以“@”字符开头,本节将允许该组字符包含大写字母
[a-z-])+
- 本节是您的“普通”用例,它将只匹配包含小写和连字符的一系列字符
如果你发布了你尝试过的东西以及为什么它不起作用,它会澄清你需要什么。
^((@[a-zA-Z-]+|([a-z-])+)\s?)+$
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));
}