我一直在撞墙挡住了好几个小时试图解决这个问题。我正在尝试捕获三个组如果他们在那里,如果没有,捕获第一组中的所有内容。我可以将它分解为单独的正则表达式语句,但保留一个会很棒。
4个不同的字符串如下所示:
Be somewhere now & be there later (Store) @1300
Be at work! @1430
Go home whenever (Home)
Don't ever go to the donut shop.
我正在寻找的最终结果如下:
(Group 1) Be somewhere now & be there later (Group 2) Store (Group 3) @1300
(Group 1) Be at work! (Group 2) (Group 3) @1430
(Group 1) Go home whenever (Group 2) Home (Group 3)
(Group 1) Don't ever go to the donut shop. (Group 2) (Group 3)
到目前为止,我能做的最好的事情是处理第一和第二选项,只抓住第3组。我已经这样做了:
.*(?:\(.*\))?\s(\@\d+)$
我非常确定.*
必须删除,因为如果我将其转换为(.*)
,它始终会匹配所有内容。
我已经尝试了我所知道的每一种方式,但无法让它工作,所以现在我联系你。 : - )
答案 0 :(得分:1)
试试这个:
^(.*?)(?:\(([^)]+)\))?(?:\s+@(\d+))?$
关键是.*?
是非贪婪的匹配。它将尽可能少地匹配,因此它将不匹配整个字符串,除非其他组无法匹配。
查看在线工作:rubular