1

目前正则表达式是:

[A-Z]+(?=-\d+$)

这将为遵循以下格式的大多数字符串提取正确的值:

ANG-RGN-SOR-BCP-0004             i.e. BCP

但是,它会提取SS以下文档而不是PMR

ANG-B31-OPS-PMR-MACE-SS-0229

所以基本上我想去掉第四个词(在连字符之间),所以它应该选择BCPand PMR

4

2 回答 2

2

以下正则表达式将获得第 1 组中的第 4 项:

(?:[A-Z0-9]+-){3}([A-Z0-9]+)
  • 第一位(?:...)是“非捕获组”,它的作用类似于一个组,但不会出现在反向引用列表中。
  • 下一位表示“这些非捕获组中的 3 个”。
  • 最后,一个捕获组来收集你想要的东西。

我在这里假设所有组仅包含大写字母和数字,您应该修改其中的部分[square brackets]以表示这些组可能是什么。


Python中更容易理解的方法:

a = "ANG-B31-OPS-PMR-MACE-SS-0229"
part = a.split('-')[3]

print part

这给出了“PMR”。

于 2013-03-20T09:43:55.477 回答
1

这应该适合您的需求(演示):

(?:.+?-){3}([^-]+)

您将能够访问第一个捕获组中的第四个术语

于 2013-03-20T09:44:00.657 回答