如何在正则表达式中查找连续重复?

时间:2015-11-19 18:12:49

标签: python regex

我正在尝试找到连续重复字母数字字符的匹配项。我正在尝试re.match("(\w)[\\1][\\1]",mystring)但它似乎不起作用(总是返回None)。我想说“在括号中捕获任何字母数字字母,检查它是否连续两次出现。”

3 个答案:

答案 0 :(得分:2)

足够接近:)

您可以使用re.findallre.search

LETTERS1 <- c(LETTERS[-1], LETTERS[1])
NUM <- c(1:9,0)
gsubfn('(.)$', function(x) if(grepl('[0-9]', x)) 
   NUM[match(x, NUM)+1] else LETTERS1[match(x, LETTERS1)+1], waferlist)

使用match无法执行此操作的原因是mystring = 'abccd' print re.findall(r'(\w)\1', mystring) # ['c'] 尝试从字符串的开头找到匹配项,并且在字符串的开头没有这样的模式match字符串。

如果您想使用"(\w)[\\1][\\1]",您仍然可以这样做,但需要对捕获的群组进行额外访问:

match

答案 1 :(得分:1)

您可以执行以下操作:

import re
test='abcaabbccaaa123333333'
print re.findall(r'(([a-zA-Z0-9])\2+)', test)

打印:

[('aa', 'a'), ('bb', 'b'), ('cc', 'c'), ('aaa', 'a'), ('3333333', '3')]

答案 2 :(得分:0)

>>> pat = re.compile(r'(\w)\1')
>>> pat.findall('1234456678')
['4', '6']

你非常接近,但提醒我使用[]表示捕获[]括号内的任何内容,以便[\\1]与文字字符\和{{1}匹配}。另外,如果你重复两次,它会尝试找到三元组,因为第一组被计算为第一组。

这只会匹配双打BTW,如果你想匹配任意数量的重复,在正则表达式的末尾添加一个1标记