正则表达式匹配两个字符串之间的无限重复模式

时间:2018-03-24 18:03:54

标签: regex

我有一个中间重复模式的数据集:

YM10a15b5c27

YM1b5c17

如何获得“YM”和最后两个数字之间的内容?

我正在使用它,但最终得到一个号码而不应该。

/([A-Z] +)([0-9A-Z] +)([0-9] +)/

3 个答案:

答案 0 :(得分:0)

您应该使用:

/^(?:([a-z]+))([0-9a-z]+)(?=\1)/

^匹配句子的开头。这非常很重要,因为如果您的代码是aaaa1234aaaa,那么如果没有^,它也会匹配结尾的aa a。

(?:([a-z]+))是一个非捕获组,它将从'a'到'z'的任何字母作为group 1

(?=\1)告诉正则表达式匹配文本,只要它在开始时跟着相同的代码。

您所要做的就是通过group(2)

提取代码

An example is shown here

答案 1 :(得分:0)

最后一组捕获两个字符:

/([A-Z]+)([0-9a-z]+)([0-9]{2})/

答案 2 :(得分:0)

解决方案

如果您想将这些字符串作为整个字词匹配,请使用\b(([a-z])\2)([0-9a-z]+)(\1)\b
如果您需要将它们作为单独的字符串匹配,请使用^(([a-z])\2)([0-9a-z]+)(\1)$

解释

  • \b - 字边界(或使用^时,字符串的开头)
  • (([a-z])\2) - 第1组:任何小写的ASCII字母,恰好两次出现(aabb等。)
  • ([0-9a-z]+) - 第3组:1位或更多位数或小写ASCII字母
  • (\1) - 第4组:与第1组中存储的文本相同的文本
  • \b - 字边界(或使用$时,字符串结尾)。