正则表达式捕获两个下划线之间的数字或数字

时间:2017-06-28 19:51:06

标签: java regex

由于将传统平台与较新平台相结合,我们需要一个可以捕获两种不同类型输入的单一正则表达式。 这显然不是很好的做法 - 并且在我们能够平衡整合并恢复理智之前,它将成为一种临时解决方案。

Regex表达式必​​须具有:

  • 只有一个捕获组
  • 全球"贪心"标志已打开,我们无法控制它
  • 用Java实现

两种类型的输入:

  1. 只是一个数字ID。我们需要捕获所有这些。示例:12345678
  2. 数字ID,下划线,数字ID,下划线,数字ID。我们需要正则表达式来捕获中间的ID。示例:997744_12345678_33557799,预期结果为12345678
  3. 仅对#1类型的输入,正则表达式可能是(\d+)。对于仅#2类型的输入,正则表达式可能是\d+\_(\d+)\_\d+。但正如所说 - 我需要一个可以处理这两者的正则表达式。

    我试图将这两者结合起来,如下所示:

    \d{0,}\_{0,1}(\d+)\_{0,1}\d{0,} - >适用于类型#2,因为第一个表达式的贪婪

    ,只捕获类型#1的最后一个数字

    因此尝试通过添加?使第一个表达非贪婪,得到这个:

    \d{0,}?\_{0,1}(\d+)\_{0,1}\d{0,} - >适用于类型#1,但捕获类型#2中的第一个和最后一个ID,而不是中间的ID。

    我没有想法,但我很确定Regex是强大的,几乎可以做任何事情......

1 个答案:

答案 0 :(得分:4)

您可能正在寻找(?:\d+_)?(\d+)(?:_\d+)?

Java Demo