正则表达式模式匹配三个不同的东西

时间:2013-09-10 17:53:57

标签: regex

我需要帮助来创建4个正则表达式模式,以匹配文本块中的4个不同的东西。

这是文本块(名称无关紧要):

[2013/8/27 - 20:44:3] AdmCmd: Damian Santos was fined $1000 by Scott Parker, reason: BH(8-27-2013)
[2013/8/29 - 21:56:49] AdmCmd: Jimmy Greiner was fined $304389 by Scott Parker, reason: LOL(8-29-2013)
[2013/8/29 - 22:4:54] AdmCmd: Jimmy Greiner has been jailed by Scott Parker, reason: LOL(8-29-2013)
[2013/8/29 - 22:5:38] AdmCmd: Jimmy Greiner has been released from prison by Scott Parker, reason: TS(8-29-2013)
[2013/8/29 - 22:42:55] AdmCmd: James McAdams has been released from prison by Damian Santos, reason: test(8-29-2013)
[2013/8/30 - 20:17:23] AdmCmd: James McAdams has been released from prison by Scott Parker, reason: TS(8-30-2013)
[2013/8/30 - 20:26:15] AdmCmd: James McAdams has been jailed by Jimmy Greiner, reason: Test(8-30-2013)
[2013/8/30 - 20:26:37] AdmCmd: James McAdams has been released from prison by Scott Parker, reason: Test(8-30-2013)
[2013/8/31 - 11:35:35] AdmCmd: Scott Parker was fined $5000 by Scott Parker, reason: BH(8-31-2013)
[2013/8/31 - 11:36:0] AdmCmd: Scott Parker was fined $5000 by Scott Parker, reason: BH(8-31-2013)
[2013/8/31 - 11:36:49] AdmCmd: Damian Santos was fined $5000 by Scott Parker, reason: UNRP driving(8-31-2013)

我需要匹配以下名称:罚款已发布已被判入狱。我已经有了这个模式:

[A-Za-z ]+(?=was|has)

我需要发出这些动作之一的人的名字(每个句子末尾附近的名字)。我试图得到一个模式,但我不能排除“by”这个词:

(?=by)[A-Za-z ]+(?=,)

我没有尝试原因(没有日期)和日期的模式,它们都位于最后。我需要它们通过漂亮的图案切割干净。

我将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:0)

  

我试图获得一个模式,但我不能排除“by”这个词:

使用正面lookbehing而不是正向前瞻:

(?<=by )[A-Za-z ]+(?=,)

工作DEMO

答案 1 :(得分:0)

要排除“依据”,您需要使用正面观察,因此请将(?=by)更改为(?<=by)

因此,您可以使用相同的方法,(?<=reason:)后跟正则表达式来匹配BH或预期的任何代码。

最后但并非最不重要的一点是,你不应该很难在行尾的“括号”之间捕捉日期。你似乎走在正确的轨道上,完成它应该没问题!