我有一个中间重复模式的数据集:
YM10a15b5c27
和
YM1b5c17
如何获得“YM”和最后两个数字之间的内容?
我正在使用它,但最终得到一个号码而不应该。
/([A-Z] +)([0-9A-Z] +)([0-9] +)/
答案 0 :(得分:0)
您应该使用:
/^(?:([a-z]+))([0-9a-z]+)(?=\1)/
^
匹配句子的开头。这非常很重要,因为如果您的代码是aaaa1234aaaa
,那么如果没有^
,它也会匹配结尾的aa
a。
(?:([a-z]+))
是一个非捕获组,它将从'a'到'z'的任何字母作为group 1
(?=\1)
告诉正则表达式匹配文本,只要它在开始时跟着相同的代码。
您所要做的就是通过group(2)
答案 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字母,恰好两次出现(aa
,bb
等。)([0-9a-z]+)
- 第3组:1位或更多位数或小写ASCII字母(\1)
- 第4组:与第1组中存储的文本相同的文本\b
- 字边界(或使用$
时,字符串结尾)。