为了账号安全,请及时绑定邮箱和手机立即绑定

前瞻/后视问题

前瞻/后视问题

C#
梦里花落0921 2021-11-28 20:13:25
我有字符串:" to " 并想用空格分割它,但空格不能在 <> 内。所以我正在寻找的输出是 3 个字符串:<a b>to<c>我知道我应该使用后视和前视来检查 <> 内是否有空格,但不知何故我不知道如何构造这样的正则表达式。Regex.Matches("<a b> to <c>", @"(?<!<.*?)\s+(?!.*?>)") // Doesn't match space only before and after to请问有什么建议吗?
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

此模式可能适合您的需求:

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

基本上我们匹配<text>或(参见|)出现在两个结束括号之间的文本


查看完整回答
反对 回复 2021-11-28
?
茅侃侃

TA贡献1842条经验 获得超21个赞

您可以使用一种Regex.Split带有正则表达式的方法,该方法在前面没有<(以及除<and之外的任何 0+ 个字符>)并且没有跟在>(前面有 0+ 个除<and之外的字符)时匹配一个或多个空白字符>

var results = Regex.Split(s.Trim(), @"(?<!<[^<>]*)\s+(?![^<>]*>)");

查看正则表达式演示

细节

  • (?<!<[^<>]*)-一个负回顾后失败如果匹配,应立即到左边的当前位置,有一个<注视着0+字符比其他<>

  • \s+ - 1+ 个空白字符

  • (?![^<>]*>)-如果在当前位置的右侧,除了and和 then之外还有 0+ 个字符,则匹配失败的负前瞻<>>

//img1.sycdn.imooc.com//61a3728b0001204704770133.jpg

查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信