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

时间:2012-11-08 15:53:18

标签: c# regex

我需要解析一个文本并检查所有方括号之间是--之前和之后是否必须至少有一个字符。 我尝试了以下代码,但它不起作用。匹配数量很大。

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

SampleText:

Node
  (Entity [1-5])

3 个答案:

答案 0 :(得分:3)

想想我不妨提供答案......重申我的观点(经过修改):

  1. *匹配0次或更多次出现。你想要+可能。
  2. 方括号是特殊字符,需要进行转义。它们用于定义字符集。
  3. 您可能希望从匹配的“任何字符”中排除[]
  4. 将所有这些放在一起,以下内容可以做得更好:

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

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

答案 1 :(得分:1)

方括号意味着Regexes中有一些特殊的东西,你需要逃避它们。此外,如果您想要至少一个字符,则需要使用+而不是*

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

答案 2 :(得分:0)

 string txt = "(Entity [1-5])";
 Regex reg = new Regex(@"\[.+\-.+\]");

如果是#:

 string txt = "(Entity [1-5])";
 Regex reg = new Regex(@"\[\d+\-\d+\]");