带分隔符的括号中单词的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章:制作一个