如果他们有某种格式,我正在尝试子串。子串正则表达式查询是[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)
}
答案 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。