前瞻/后向问题

时间:2018-08-15 14:56:06

标签: c# regex

我有一个字符串:“ to”,想用空格将其分割,但是空格不能在<>内。所以我正在寻找的输出是3个字符串:

<a b>
to
<c>

我知道我应该使用lookbehind和lookahead来检查内部是否包含空格<>,但是不知怎么构造这样的正则表达式。

Regex.Matches("<a b> to <c>", @"(?<!<.*?)\s+(?!.*?>)") // Doesn't match space only before and after to

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

此模式可能满足您的需求:

(<.+?>)|((?<=>).+?(?=<))

基本上,我们匹配两个端括号之间的<text>或(请参见|)文本

答案 1 :(得分:1)

您可以在正则表达式中使用Regex.Split来匹配一个或多个空白字符,而不用<开头(以及<和{{1}以外的任何0+字符) }),而不是>(前面加上0+个字符,除了><之外):

>

请参见regex demo

详细信息

  • var results = Regex.Split(s.Trim(), @"(?<!<[^<>]*)\s+(?![^<>]*>)"); -如果在当前位置的紧跟着(?<!<[^<>]*)且后跟0个字符的情况下,匹配失败的negative lookbehind除了<<
  • >-1个以上的空格字符
  • \s+-如果(?![^<>]*>)<之外的0个字符紧接当前位置,则negative lookahead将失败>

enter image description here