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

本文关键字:字符串 错误 正则表达式 | 更新日期: 2023-09-27 18:12:20

我试图子字符串,如果他们有一定的格式。子字符串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)
}

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

移除外部( ... )*

说明没有匹配也是好的匹配。

或者用+代替*

除了@Kent和@leppie的答案之外,regex周围的代码也需要修改。我想这就是你想要的:

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指出的那样,[^)](即,除了)之外的任何字符)在这种情况下更合适。此外,通过将*放在圆括号之外,您将只捕获最后一个字符。([^)]*)将它们全部捕获。

如果你说"all strings",那么:

'[CENAOD'([^')]*')']