Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带分隔符的括号中单词的c#正则表达式_C#_Regex - Fatal编程技术网

带分隔符的括号中单词的c#正则表达式

带分隔符的括号中单词的c#正则表达式,c#,regex,C#,Regex,我需要解析文本并检查所有方括号之间是否为-,并且-前后必须至少有一个字符。 我尝试了下面的代码,但不起作用。火柴数量太多了 Regex regex = new Regex(@"[\.*-.*]"); MatchCollection matches = regex.Matches(textBox.Text); 样本文本: Node (Entity [1-5]) 方括号表示正则表达式中的一些特殊内容,您需要避开它们。此外,如果希望至少有一个字符,则需要使用+而不是* Regex regex

我需要解析文本并检查所有方括号之间是否为
-
,并且
-
前后必须至少有一个字符。 我尝试了下面的代码,但不起作用。火柴数量太多了

Regex regex = new Regex(@"[\.*-.*]");
MatchCollection matches = regex.Matches(textBox.Text);
样本文本:

Node
  (Entity [1-5])

方括号表示正则表达式中的一些特殊内容,您需要避开它们。此外,如果希望至少有一个字符,则需要使用
+
而不是
*

Regex regex = new Regex(@"\[.+-.+\]");
MatchCollection matches = regex.Matches(textBox.Text);

方括号表示正则表达式中的一些特殊内容,您需要避开它们。此外,如果希望至少有一个字符,则需要使用
+
而不是
*

Regex regex = new Regex(@"\[.+-.+\]");
MatchCollection matches = regex.Matches(textBox.Text);

我想我还是提供一个答案。。。重申我的观点(经过修改):

  • *
    匹配0个或多个事件。你可能想要
  • 方括号是特殊字符,需要转义。它们用于定义字符集
  • 您可能希望从“任意字符”匹配中排除
    [
    ]
  • 综上所述,以下几点应该会让你做得更好:

    Regex regex = new Regex(@"\[[^-[\]]+-[^[\]]+\]");
    

    虽然有点混乱,但关键是
    [^[\]]
    表示除方括号以外的任何字符
    [^-[\]]
    意味着,但也不允许
    -
    。这是一种优化,不是必需的,但它只是减少了正则表达式引擎在计算匹配项时必须做的工作。感谢ridgerunner指出了这一优化。

    我想我还是提供一个答案吧。。。重申我的观点(经过修改):

     string txt = "(Entity [1-5])";
     Regex reg = new Regex(@"\[.+\-.+\]");
    
  • *
    匹配0个或多个事件。你可能想要
  • 方括号是特殊字符,需要转义。它们用于定义字符集
  • 您可能希望从“任意字符”匹配中排除
    [
    ]
  • 综上所述,以下几点应该会让你做得更好:

    Regex regex = new Regex(@"\[[^-[\]]+-[^[\]]+\]");
    
    虽然有点混乱,但关键是
    [^[\]]
    表示除方括号以外的任何字符
    [^-[\]]
    意味着,但也不允许
    -
    。这是一种优化,不是必需的,但它只是减少了正则表达式引擎在计算匹配项时必须做的工作。感谢ridgerunner指出这种优化

     string txt = "(Entity [1-5])";
     Regex reg = new Regex(@"\[.+\-.+\]");
    
    如果是为了#:

    如果是为了#:


    几点。1)
    *
    匹配0个或多个事件。你可能想要。2) 方括号是特殊字符,需要转义。它们用于定义字符集。3) 您可能希望通过放置一个?在+之后,您可以告诉它匹配最小数量的字符,而不是尽可能多的字符。@Chris同意第1点和第2点,但非贪婪匹配应该不是满足其要求的必要条件。@ean5533:您是对的。我在考虑像
    [asdasd-][asdasda]
    这样的字符串,但你是对的,非贪婪在这里没有帮助。有几点。1)
    *
    匹配0个或多个事件。你可能想要。2) 方括号是特殊字符,需要转义。它们用于定义字符集。3) 您可能希望通过放置一个?在+之后,您可以告诉它匹配最小数量的字符,而不是尽可能多的字符。@Chris同意第1点和第2点,但非贪婪匹配应该不是满足其要求的必要条件。@ean5533:您是对的。我在考虑像
    [asdasd-][asdasda]
    这样的字符串,但你是对的,非贪婪在这里没有帮助。使用这个表达式,我总是得到零结果。@Tomtom我刚刚注意到你对一个
    字符进行了转义(我复制粘贴时没有注意到)。这就是问题的根源。现在试试。这将匹配我怀疑不需要的
    “[test-][-foo]”
    。@Chris True。如果用例是一个需求,那么您的答案会更加可靠。你应该在回答中提到这种情况。使用这个表达式,我总是得到零结果。@Tomtom我刚刚注意到你漏掉了一个
    字符(我复制粘贴时没有注意到)。这就是问题的根源。现在试试。这将匹配我怀疑不需要的
    “[test-][-foo]”
    。@Chris True。如果用例是一个需求,那么您的答案会更加可靠。你应该在回答中提到这种情况。这将匹配我怀疑不需要的
    “[test-][-foo]”
    。这将匹配我怀疑不需要的
    “[test-][-foo]”
    。+1。但我会在第一个负字符类中添加破折号,以消除一些额外的回溯查找破折号。@ridgerunner:相应地编辑了我的答案。我不得不承认,我对你为什么这样做有点含糊其辞,因为尽管我知道这将如何工作,但我对正则表达式匹配如何工作的细节不太了解,所以我不想尝试这样做。没有详细说明为什么这是一种优化,而我可能会弄错。:)第6章:通过题为“自由流动的正则表达式”的章节,打造一个有效的目的表达。它以带回家的信息结束:“一个良好引导的正则表达式是一个快速正则表达式”。这本书(有趣地)教人如何在正则表达式中思考,即底层NFA引擎必须如何执行其工作。如果你经常使用正则表达式,那么花在阅读这本书上的时间将为你自己带来数倍的回报。但我会在第一个负字符类中添加破折号,以消除一些额外的回溯查找破折号。@ridgerunner:相应地编辑了我的答案。我不得不承认,我对你为什么这样做有点含糊其辞,因为尽管我知道这将如何工作,但我对正则表达式匹配如何工作的细节不太了解,所以我不想尝试这样做。没有详细说明为什么这是一种优化,而我可能会弄错。:)第6章:制作一个