C# Regex使用C限制开括号和闭括号只出现一次#

C# Regex使用C限制开括号和闭括号只出现一次#,c#,regex,C#,Regex,如何确保输入文本中不允许有多个括号“(“and”)”? 下面的表达式允许数字、空格、连字符和方括号 Regex.Match(text, @"^[0-9 (,),-]+$").Success 我不知道该允许什么,比如“((123)456-7891或(91)123-23123(1)。正确的字符串可以是:”(123)1231231或(121)123-213123 编辑: 很抱歉不清楚。要求只允许数字、空格、连字符和方括号(仅限一组)。具体来说,“(“应始终有一个结束方括号”)。正如你们中的一位所说的

如何确保输入文本中不允许有多个括号“(“and”)”? 下面的表达式允许数字、空格、连字符和方括号

Regex.Match(text, @"^[0-9 (,),-]+$").Success
我不知道该允许什么,比如“((123)456-7891或(91)123-23123(1)。正确的字符串可以是:”(123)1231231或(121)123-213123

编辑: 很抱歉不清楚。要求只允许数字、空格、连字符和方括号(仅限一组)。具体来说,“(“应始终有一个结束方括号”)。正如你们中的一位所说的“无括号”或“一组括号”。如果有人也能告诉我们如何允许在任何位置使用括号,而不仅仅是在开始时

^[^\(\)]*\([^\(\)]*\)[^\(\)]*$
根据您的示例为我工作。但是,这不能确保短语的其余部分是数字。例如,此正则表达式将同时匹配
(123)1231231
abc(def)ghi
让我知道这是否正确。

这样做:

@"^(?:[^()]*|[^()]*\([^()]*\)[^()]*)$"
并且仅允许数字、连字符和空格:

@"^(?:[-0-9 ]*|[-0-9 ]*\([-0-9 ]*\)[-0-9 ]*)$"
@"^[-0-9 ]*\([-0-9 ]*\)[-0-9 ]*$"
这基本上意味着要么没有paren,要么只能有一组paren。如果您只希望字符串正好有一组paren,可以使用以下更简单的形式:

@"^[^()]*\([^()]*\)[^()]*$"
并且仅允许数字、连字符和空格:

@"^(?:[-0-9 ]*|[-0-9 ]*\([-0-9 ]*\)[-0-9 ]*)$"
@"^[-0-9 ]*\([-0-9 ]*\)[-0-9 ]*$"

你所要求的和你想要的可能是两件不同的事情:-) 一些例子:

  • 1234(12)
  • 1234
  • )1234
  • (123412)
它们合法吗

从这个开始:

法律:

  • 123456
  • 1234-456
  • (123)345
  • (123)345
  • (123)345-678
  • (123)345678
正则表达式:

@"^(\(\[0-9]+\) ?)?\[0-9]+(-\[0-9]+)?$"

如果始终是开括号后跟3个数字,则关闭括号,将其放入正则表达式:

@"^\(\d{3}\)\s?\d{3}-?\d{4}$"

也就是说,开括号、三个数字、闭括号、可选空格、三个数字、可选连字符、四个数字。

我认为这适用于您指定的上述实例:

Regex.Match(text, @"^\([0-9]{3}\)\s?[0-9]{3}-?[0-9]+$").Success

这将匹配字符串末尾的任意位数。您没有指定允许的位数。如果您想更具体,可以将最后一个+符号替换为{4,6}其中,4是-后面的最小位数,6是最大位数。

注意\d将匹配其他字符集的数字,而\s将匹配制表符和其他“奇怪”空格(例如nbsp)。是的,Xantos是正确的。但是感谢您的响应。我需要允许在任何位置使用paren,但“)应在“(”。你是对的,我没有编辑这篇文章。顺便问一下,如何确保括号在字符串中的任何位置。这意味着可以在开头或中间?只需要数字、空格、连字符和括号。很好,但是如何确保只包含数字、空格和连字符。使用只允许数字、空格和连字符的模式进行更新你要求的。Michael,这是很棒的东西。我使用了-@“^(?:[-0-9]*.[-0-9]*([-0-9]*)[-0-9]*)$”,效果很好。我编辑了这篇文章。需要检查字符串中的任何位置,但只有一组。