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'
我试过一些简单的方法,例如:
(and)
但这只是 return 而不是内容。
(?<=and)(.*)(?=and)
但是这个 return 是第二个的内容,不包括第一个或最后一个。
\b(and )
但同样这只是 return,我不明白为什么如果我在 and
前面包含一个 space if 找不到任何实例。
.*(\b(and))
但是这会跳过第一个 and
和 return 的内容一直到第二个 and
你能帮忙吗?
谢谢
注意:这将在 .net 2019 项目中使用。
如果您只需要拆分 and
或 or
子字符串,请使用 String.Split
:
var results = s.Split(new[] {"and", "or"}, StringSplitOptions.RemoveEmptyEntries);
如果您需要将 or
或 and
拆分为整个单词,您需要一个 Regex.Split
:
var results = Regex.Split(s, @"\s*\b(?:and|or)\b\s*");
这里,
\s*
- 0+ 个空格
\b
- 确保单词从这里开始
(?:and|or)
- non-capturing 组匹配 and
或 or
子串
\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);
我需要通过 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'
我试过一些简单的方法,例如:
(and)
但这只是 return 而不是内容。(?<=and)(.*)(?=and)
但是这个 return 是第二个的内容,不包括第一个或最后一个。\b(and )
但同样这只是 return,我不明白为什么如果我在and
前面包含一个 space if 找不到任何实例。.*(\b(and))
但是这会跳过第一个and
和 return 的内容一直到第二个and
你能帮忙吗?
谢谢
注意:这将在 .net 2019 项目中使用。
如果您只需要拆分 and
或 or
子字符串,请使用 String.Split
:
var results = s.Split(new[] {"and", "or"}, StringSplitOptions.RemoveEmptyEntries);
如果您需要将 or
或 and
拆分为整个单词,您需要一个 Regex.Split
:
var results = Regex.Split(s, @"\s*\b(?:and|or)\b\s*");
这里,
\s*
- 0+ 个空格\b
- 确保单词从这里开始(?:and|or)
- non-capturing 组匹配and
或or
子串\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);