我有一个字符串:“ to”,想用空格将其分割,但是空格不能在<>内。所以我正在寻找的输出是3个字符串:
<a b>
to
<c>
我知道我应该使用lookbehind和lookahead来检查内部是否包含空格<>,但是不知怎么构造这样的正则表达式。
Regex.Matches("<a b> to <c>", @"(?<!<.*?)\s+(?!.*?>)") // Doesn't match space only before and after to
有什么建议吗?
答案 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将失败>
。