使用Regex在混合行中查找第二组数字

时间:2016-09-07 21:57:52

标签: regex regex-lookarounds

我需要在第一组字母之后提取46,789,955.22,包括。, - 在以下行中

123,145  ASD  25,678,345.22         46,789,955.22 USD 5,445,453.22 

我用它来提取:

(?<=[A-Z][A-Z][A-Z])\s*[\d\.\,\-]*\s*([\d\.\,\-]*)

但是这也会在ASD之后返回第一组数字。有没有办法只返回一个匹配,如果数字前面有一组三个字母,并且在该行的其余部分的某个地方出现另一组三个字母?

每当我尝试使用另一个前瞻来找到下一组字母时,我都会失去捕获组。

1 个答案:

答案 0 :(得分:0)

使用预测断言另一个国家/地区代码出现在目标之后的某个位置:

[A-Z]{3}\s*([\d.,-]*)(?=.*[A-Z]{3})

我还删除了正则表达式中的一些不必要的字符:

  • 如果您正在使用第一组,则无需在前面看后面 - 只需使用代码
  • [A-Z][A-Z][A-Z]缩写为[A-Z]{3}
  • 大多数角色不需要在角色类中进行转义,当然也不需要在角色类中进行转义(尽管破折号必须是第一个或最后一个是文字破折号)