0

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

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

示例文本:

Node
  (Entity [1-5])
4

3 回答 3

3

想我不妨提供一个答案......重申我的观点(有修改):

  1. *匹配 0 次或多次出现。你可能想要+。
  2. 方括号是特殊字符,需要转义。它们用于定义字符集。
  3. 您可能希望从“任何字符”匹配中排除[]

把这一切放在一起,以下应该会更好:

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

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

于 2012-11-08T16:01:26.847 回答
1

方括号在正则表达式中意味着一些特殊的东西,你需要将它们转义。此外,如果您想要至少一个字符,那么您需要使用+而不是*.

Regex regex = new Regex(@"\[.+-.+\]");
MatchCollection matches = regex.Matches(textBox.Text);
于 2012-11-08T15:56:01.310 回答
0
 string txt = "(Entity [1-5])";
 Regex reg = new Regex(@"\[.+\-.+\]");

如果是#:

 string txt = "(Entity [1-5])";
 Regex reg = new Regex(@"\[\d+\-\d+\]");
于 2012-11-08T16:04:41.357 回答