C# 正则表达式只接受所有字符串

C# 正则表达式只接受所有字符串,c#,regex,match,C#,Regex,Match,如果子字符串有特定的格式,我将尝试创建它们。子字符串Regex查询是[CENAOD(xyx)]。我已经完成了以下代码,但当在循环中运行时,它表示所有结果都匹配,这是错误的。我哪里做错了什么 string strRegex = @"(\[CENAOD\((\S|\W)*\)\])*"; string strCenaOd = sReader["intro"].ToString() if (Regex.IsMatch(strCenaOd, strRegex, RegexOptions.IgnoreCa

如果子字符串有特定的格式,我将尝试创建它们。子字符串Regex查询是
[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)
}
如果你说“所有字符串”,那么:

\[CENAOD\([^\)]*\)\]
如果你说“所有字符串”,那么:

\[CENAOD\([^\)]*\)\]
拆下外部
(…)*

也就是说,没有匹配也是好匹配

或者使用
+
而不是
*

移除外部
(…)*

也就是说,没有匹配也是好匹配


或者使用
+
而不是
*

添加到@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
是一种非常低效的匹配任何字符的方法<代码>通常是您所需要的全部,但正如Kent指出的,
[^)]
(即除
之外的任何字符)在这种情况下更合适。此外,通过将
*
放在圆括号外,您将只捕获最后一个字符<代码>([^)]*)捕获所有这些代码。更多细节,.

除了@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
是一种非常低效的匹配任何字符的方法<代码>通常是您所需要的全部,但正如Kent指出的,
[^)]
(即除
之外的任何字符)在这种情况下更合适。此外,通过将
*
放在圆括号外,您将只捕获最后一个字符<代码>([^)]*)捕获所有这些代码。有关更多详细信息