在不包含字符串的字符串之前使用Regex通配符

时间:2014-05-22 14:08:57

标签: regex

我试图从一个句子中提取一个关键术语,该句子可以从一个单词或一组特定单词开始,然后可以跟随随机单词直到关键术语。提取是通过命名组完成的。

(?<QUALIFY>Anchor[^.]{1,30})(?<CAPTURE>(?<OPTIONAL>(Up |Down |Left |Right))?(?<!\d)(\d{1,5})( Keyword1| Keyword2| Keyword3))

如果字符串是

,则此方法有效
  • Anchor 33 Keyword1

返回

  • QUALIFY:Anchor
  • 捕获:33关键字1

但是如果字符串是

  • Anchor Up 33 Keyword1

其中包含我试图捕获它的关键术语中的一个可选单词返回:

  • QUALIFY:Anchor Up
  • 捕获:33关键字1

显然,它认为'Up'是通配符字符串的一部分。

我期待/渴望:

  • QUALIFY:Anchor
  • CAPTURE:Up 33 Keyword1

所以问题是如何强制正则表达式不考虑我的关键项中的任何内容作为通配符“QUALIFY”的一部分?我试过各种^和?!无济于事。

2 个答案:

答案 0 :(得分:1)

我认为你只需要使你的Qualify小组变得懒惰:

(?<QUALIFY>Anchor[^.]{1,30}?)(?P<CAPTURE>(?<OPTIONAL>(Up |Down |Left |Righ t))?(?<!\d)(\d{1,5})( Keyword1| Keyword2| Keyword3))

答案 1 :(得分:0)

在第一组中使用非贪婪修饰符:

(?<QUALIFY>Anchor[^.]{1,30}?)
#                   here __^

另外我猜(Up |Down |Left |Righ t)确实是(Up |Down |Left |Right )