使用正则表达式精确匹配相同字符的次数

4

我正在尝试使用Python re 模块查找重复出现特定次数的相同字母或数字组。使用 (.) 可以很好地识别将要被重复的内容,但我无法找到如何防止它只重复不同的字符。以下是我的代码:

re.search(r'(.){n}', str)

所以举个例子,如果 n = 4,它会匹配来自999979999,但如果n = 3,则不会匹配。
谢谢。

这个网站是你的好朋友:http://www.txt2re.com/index-php.php3。 - g.d.d.c
2
你能澄清一下你想要匹配什么,以及你不想匹配什么吗?我不明白“我找不到如何防止它只重复不同字符”的意思。 - Francis Avila
我想匹配任何重复n次的内容,所以如果9重复n次,我想要9999,或者如果T重复n次,我想要TTTT,但如果我说.{4},我不想要9897。 - cah
1
说实话,正则表达式似乎不是这项工作的正确工具。您可以轻松创建要检查的字符串,因此在那一点上您甚至不需要正则表达式。 - Matt Ball
1
@MДΓΓ БДLL,我认为这不适用。操作者想要任何字符的系列,而不是像9这样的特定字符。 - Etienne Perot
1个回答

4
如何呢?
(?:^|(?<=(.)))(?!\1)(.)\2{n-1}(?!\2)

这将会:
  • (?:^|(?<=(.))):确保:
    • ^:要么我们在字符串的开头
    • (?<=(.)):要么我们不在字符串的开头;然后,捕获匹配前面的字符并将其保存到\1中。
  • (?!\1)(.):匹配任何不是\1的字符,并将其保存到\2中。
  • \2{n-1}:匹配\2 n-1次
  • (?!\2):确保\2在向前查找时无法匹配

n-1仅为符号;显然,您要用n-1的实际值替换它,而不是用8-1或其他值。)。

重要编辑:正则表达式的先前版本((.)\1{n-1}(?!\1))不起作用,因为它没有考虑到字符匹配\1在匹配后面的问题。上面的正则表达式修复了这个问题。


谢谢,看起来它能工作,我会把你标记为第一位,但由于某种原因,它让我等待了4分钟。 - cah
1
请重新阅读答案;我之前的回答版本不可行。上面的应该现在可行。 - Etienne Perot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接