C#Regex-如何验证特定单词或数字,但不能同时验证两者

C#Regex-如何验证特定单词或数字,但不能同时验证两者,c#,regex,C#,Regex,我需要验证一个值,要求它可以包含数字0-9或特定的单词,但不能同时包含两个 我使用下面的表达式 Regex regex = new Regex(@"\b(Private Bag)\b|[0-9]"); 但是,如果您发现使用上述表达式进行验证对于所有场景都是通过的 这个正则表达式哪里出了问题?您可能需要在模式周围放置start(^)和end($)锚。否则,该模式将匹配包含特定单词或数字的任何值,而不管字符串中还显示什么。此外,听起来您需要包含一个或多个(+)数字: 此模式将匹配包含私人行李或一个

我需要验证一个值,要求它可以包含数字0-9或特定的单词,但不能同时包含两个

我使用下面的表达式

Regex regex = new Regex(@"\b(Private Bag)\b|[0-9]");
但是,如果您发现使用上述表达式进行验证对于所有场景都是通过的


这个正则表达式哪里出了问题?

您可能需要在模式周围放置start(
^
)和end(
$
)锚。否则,该模式将匹配包含特定单词或数字的任何值,而不管字符串中还显示什么。此外,听起来您需要包含一个或多个(
+
)数字:

此模式将匹配包含
私人行李
或一个或多个十进制数字而不包含其他内容的字符串

或者,如果您不关心分组,这就简单一点:

Regex regex = new Regex(@"^(Private Bag|[0-9]+)$");

您可能需要在模式周围放置开始(
^
)和结束(
$
)锚点。否则,该模式将匹配包含特定单词或数字的任何值,而不管字符串中还显示什么。此外,听起来您需要包含一个或多个(
+
)数字:

此模式将匹配包含
私人行李
或一个或多个十进制数字而不包含其他内容的字符串

或者,如果您不关心分组,这就简单一点:

Regex regex = new Regex(@"^(Private Bag|[0-9]+)$");

如果你想要的是你的问题陈述

要求是它可以包含数字0-9或特定单词,但不能同时包含两个

(对于其他内容有效的未声明要求),则需要使用负前瞻(
(?!xxx)
)和负前瞻(
(?)断言。例如,此正则表达式:

(?<!.*(foo|bar).*)(\d+)(?!.*(foo|bar).*)
加上一点分组和替换

((?<!.*(foo|bar).*)(\d+)(?!.*(foo|bar).*))|((?<!.*(\d+).*)(foo|bar)(?!.*(\d+).*))
(?
还有鲍勃的叔叔。上面两个都应该匹配

  • 一种十进制数字序列,其前面和后面都不跟
    foo
    bar
    ,或
  • 一种实例
    foo
    bar
    ,前面和后面都没有十进制数字序列
放松点!或者别的什么


您应该注意,特别是当匹配的文本很长时,这几乎肯定不是很有效,因为它可能涉及大量回溯和前瞻。

如果您想要的是您的问题陈述

要求是它可以包含数字0-9或特定单词,但不能同时包含两个

(对于其他内容有效的未声明要求),则需要使用负前瞻(
(?!xxx)
)和负前瞻(
(?)断言。例如,此正则表达式:

(?<!.*(foo|bar).*)(\d+)(?!.*(foo|bar).*)
加上一点分组和替换

((?<!.*(foo|bar).*)(\d+)(?!.*(foo|bar).*))|((?<!.*(\d+).*)(foo|bar)(?!.*(\d+).*))
(?
还有鲍勃的叔叔。上面两个都应该匹配

  • 一种十进制数字序列,其前面和后面都不跟
    foo
    bar
    ,或
  • 一种实例
    foo
    bar
    ,前面和后面都没有十进制数字序列
放松点!或者别的什么


您应该注意,特别是当匹配的文本很长时,这几乎肯定不是很有效,因为它可能涉及大量回溯和前瞻。

为什么不使用两个正则表达式?一个用于检查值数字字符串,另一个用于检查特定词。为什么不使用两个正则表达式?一个用于检查值编号字符串,其他检查特定单词。对于验证,匹配组无关紧要,因此您可以删除
?:
。或者将其添加到两个组中作为后续:)@dognose一般来说,如果有人发布了一个包含组的问题,我会尝试在我的答案中保留这些组。但在这种情况下,你是对的,这似乎没有必要。即使组不是必需的,我发现有组的答案更具吸引力。感谢验证匹配组不重要,因此你可以删除
?:
。或者将其添加到两个组中作为结果:)@dognose通常,如果有人发布了一个包含组的问题,我会尝试在我的答案中保留这些组。但在这种情况下,你是对的,这似乎没有必要。即使不需要组,我发现有组的答案更吸引人。谢谢