如何用正则表达式替换最后两个单词

时间:2015-06-06 10:55:08

标签: regex

我有一个像这样形成的输入:

  

1. [可变长度空白] [aaa] [bbb] [ccc]名称[01] [ - ] [可变长度的附加名称] [endword1] [endword2]

[]中的所有内容都是可选的,但aaa bbb cccendword1以及endword2是固定关键字。第一个数字是从0n的计数器,第二个数字有两个数字[0-9][0-9](如果存在)。

我可以匹配所有内容,但最后两个单词,有时(它们不是必需的)结束了这一行:

[0-9]*\.[^\S\r\n]{1,}(\baaa\b)?[^\S\r\n]*(\bbbb\b)?[^\S\r\n]{1,}?(\bccc\b)?[^\S\r\n]{1,}[A-Za-z0-9\s]*(\-)?[^\S\r\n]{1,}[A-Za-z0-9\s]*

那么我如何检查我的最后两个结束语?

另外:我不知道有效的第一部分是否是一个好的正则表达式;因此,如果您认为有更好/更清洁的东西,请随意改进它。

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

^\d*\.\h+(\baaa\b)?\h*(\bbbb\b)?\h*(\bccc\b)?\h*[A-Za-z0-9\s]*(\-)?\h+[A-Za-z0-9\s]*?(\bendword1\b)?\h*(\bendword2\b)?$
  • [^\S\r\n]已替换为\h(可变长度的水平空格)
  • 使最后一个模式非贪婪匹配结束词(如果存在)

请参阅DEMO