我试图从一个句子中提取一个关键术语,该句子可以从一个单词或一组特定单词开始,然后可以跟随随机单词直到关键术语。提取是通过命名组完成的。
(?<QUALIFY>Anchor[^.]{1,30})(?<CAPTURE>(?<OPTIONAL>(Up |Down |Left |Right))?(?<!\d)(\d{1,5})( Keyword1| Keyword2| Keyword3))
如果字符串是
,则此方法有效返回
但是如果字符串是
其中包含我试图捕获它的关键术语中的一个可选单词返回:
显然,它认为'Up'是通配符字符串的一部分。
我期待/渴望:
所以问题是如何强制正则表达式不考虑我的关键项中的任何内容作为通配符“QUALIFY”的一部分?我试过各种^和?!无济于事。
答案 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 )