return 使用正则表达式的 `And ` 关键字之间的内容

return content between `And ` keyword using regex

我需要通过 and 操作数(最终 Or)拆分一个字符串,但我不确定如何去做。

例如,如果我有以下字符串

Name contains 'al' and Country equals 'US|UK|FR' and Status equals 'Open|Closed'

我想取回包含以下内容的数组:

[0]Name contains 'al' 
[1]Country equals 'US|UK|FR'
[2]Status equals 'Open|Closed'

如果我只有 Name contains 'al' 而没有任何 and,它应该只是 return 提供字符串

[0]Name contains 'al'

我试过一些简单的方法,例如:

  1. (and) 但这只是 return 而不是内容。
  2. (?<=and)(.*)(?=and) 但是这个 return 是第二个的内容,不包括第一个或最后一个。
  3. \b(and ) 但同样这只是 return,我不明白为什么如果我在 and 前面包含一个 space if 找不到任何实例。
  4. .*(\b(and)) 但是这会跳过第一个 and 和 return 的内容一直到第二个 and

你能帮忙吗?

谢谢

注意:这将在 .net 2019 项目中使用。

如果您只需要拆分 andor 子字符串,请使用 String.Split:

var results = s.Split(new[] {"and", "or"}, StringSplitOptions.RemoveEmptyEntries);

如果您需要将 orand 拆分为整个单词,您需要一个 Regex.Split:

var results = Regex.Split(s, @"\s*\b(?:and|or)\b\s*");

这里,

  • \s* - 0+ 个空格
  • \b - 确保单词从这里开始
  • (?:and|or) - non-capturing 组匹配 andor 子串
  • \b - 单词结束
  • \s* - 0+ 个空格。

如果需要区分大小写,请使用 (?i) 内联修饰符或 RegexOptions.IgnoreCase:

var results = Regex.Split(s, @"(?i)\s*\b(?:and|or)\b\s*");
var results = Regex.Split(s, @"\s*\b(?:and|or)\b\s*", RegexOptions.IgnoreCase);