正则表达式在特定位置找到价值

时间:2013-03-20 09:38:11

标签: regex

目前正则表达式是:

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

这会为大多数符合以下格式的字符串提取正确的值:

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

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

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

所以基本上我想拉出第四个词(在连字符之间),所以它应该选择BCPPMR

2 个答案:

答案 0 :(得分: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”。

答案 1 :(得分:1)

这应该符合您的需求(demo):

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

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