.net 正则表达式-不包含除end以外的特定字符

.net 正则表达式-不包含除end以外的特定字符,.net,regex,.net,Regex,我需要匹配任何以“&”结尾但中间不包含“&”或“&”的行 a b c & a, b, c, & a & b, c & a & b 我通过以下方法获得了部分成功: ^(?!.*,).*&.*$ 我得到了两个: a b c & a & b 所以我试过了 ^(?!.*(,|&)).*&.*$ 我找不到匹配的。如何修改我的正则表达式,使我只能获得abc&?我正在使用.NET似乎您应该通过使用否定字符类来获得所需

我需要匹配任何以“&”结尾但中间不包含“&”或“&”的行

a b c &

a, b, c, &

a & b, c &

a & b
我通过以下方法获得了部分成功:

^(?!.*,).*&.*$
我得到了两个:

a b c &
a & b
所以我试过了

^(?!.*(,|&)).*&.*$

我找不到匹配的。如何修改我的正则表达式,使我只能获得
abc&
?我正在使用.NET

似乎您应该通过使用否定字符类来获得所需的内容,例如

^[^,&]*&\s*$
使用多行标志

如果您不想按照revo的建议允许使用尾随空格,可以将
\s*
替换为
\r?


如果您正在处理多行文本(而不是测试行对行),您可能还希望将换行符添加到否定字符类(
[^,&\n]
),以避免重叠匹配。

似乎您应该通过使用否定字符类获得所需的内容,例如

^[^,&]*&\s*$
使用多行标志

如果您不想按照revo的建议允许使用尾随空格,可以将
\s*
替换为
\r?


如果您使用多行文本(而不是逐行测试)以避免重叠匹配,您可能还希望将换行符添加到否定字符类(
[^,&\n]
),以避免重叠匹配。

可能
(?m)^*(?:,|和(?!\r?$).&\r?$
?或者可能是
(?m)^(?。*(?:,|和(?!\r?$).&\r?$
?或者最好使用
\r?
而不是
\s*
,否则行尾也允许空格。@当然,添加了注释。我认为OP处理多行输入,因此,您最好在否定字符类中添加换行符。实际上,这就是在.NET正则表达式中使用
\r?
之前的
$
的要点,该正则表达式是使用
RegexOptions.Multiline
选项编译的。最好使用
\r?
而不是
\s*
否则行末也允许空格。@revo当然,添加了一个注释。我认为OP处理多行输入,因此,最好将换行符添加到否定字符类中。实际上,这就是使用
RegexOptions.Multiline
选项编译的.NET正则表达式中
\r?
前面的
$
的要点。