正则表达式接受所有字符串,wronly

时间:2011-10-24 16:17:06

标签: c# regex match

如果他们有某种格式,我正在尝试子串。子串正则表达式查询是[CENAOD(xyx)]。我已经完成了以下代码,但在循环中运行时,它表示所有结果都匹配错误。我做错了什么?

string strRegex = @"(\[CENAOD\((\S|\W)*\)\])*";
string strCenaOd = sReader["intro"].ToString()
if (Regex.IsMatch(strCenaOd, strRegex, RegexOptions.IgnoreCase))
{
      string = (want to read content of ( ) = xyz in example)
}

3 个答案:

答案 0 :(得分:2)

删除外部( ... )*

这表示没有比赛也是一场很好的比赛。

或使用+代替*

答案 1 :(得分:1)

如果您说“所有字符串”,那该怎么样:

\[CENAOD\([^\)]*\)\]

答案 2 :(得分:1)

添加@ Kent和@ leppie的答案,围绕正则表达式的代码也需要工作。我认为这就是你想要的:

string strRegex = @"\[CENAOD\(([^)]*)\)\]";
string strCenaOd = sReader["intro"].ToString();
Match m = Regex.Match(strCenaOd, strRegex, RegexOptions.IgnoreCase);
if (m.Success)
{
  string content = m.Groups[1];
  // ...
}

IsMatch()是一个简单的“是或否”检查,它不提供任何方法来检索匹配的文本。

我特别想在您的正则表达式中对(\S|\W)*发表评论。首先,\S|\W是匹配任何角色的非常低效的方式。 .通常只是你需要的,但肯特指出,[^)](即)以外的任何字符)在这种情况下更合适。此外,通过将*放在圆括号外,您将只捕获最后一个字符。 ([^)]*)捕获了所有这些内容。有关详细信息,请read this