2

几个小时以来,我一直把头撞在墙上,试图弄清楚这一点。如果他们在那里,我正在尝试捕获三个组,如果没有,则捕获第一组中的所有内容。我可以将其分解为单独的正则表达式语句,但保留一个会很棒。

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+)$

我很确定.*必须删除它,因为如果我把它变成(.*)它总是匹配所有东西。

我已经尝试了所有我知道的方法,但无法让它发挥作用,所以现在我联系你。:-)

4

1 回答 1

1

尝试这个:

^(.*?)(?:\(([^)]+)\))?(?:\s+@(\d+))?$

关键是这.*?是一个非贪婪的匹配。它将尽可能少地匹配,因此它不会匹配整个字符串,除非其他组无法匹配。

在线查看它:rubular

于 2012-09-16T17:07:38.917 回答