可以将字符重复与正则表达式匹配吗?怎么样?

And*_*mbu 12 python regex

问题:
使用正则表达式,是否可以匹配在不同位置包含相同字符的单词?

条件:
所有单词都有相同的长度,你知道重复字符的字符位置(例如第1,第2和第4),但你不知道它是什么.

示例:
使用小写的6char字我想匹配第3和第4个字符相同的字.

parrot <- match for double r
follia <- match for double l 
carrot <- match for double r
mattia <- match for double t
rettoo <- match for double t
melone <- doesn't match
Run Code Online (Sandbox Code Playgroud)

我不能使用量词[\ d] {2}因为它匹配任何连续的两个字符,如果我说第2和第4个位置而不是第3个和第4个怎么办?

是否有可能用正则表达式做我想做的事情?如果是的话,我该怎么做?

编辑:
在评论中询问,我正在使用python

Gum*_*mbo 37

您可以使用反向引用来执行此操作:

(.)\1
Run Code Online (Sandbox Code Playgroud)

这将匹配任何字符的连续出现.


编辑    这里是一些Python示例:

import re

regexp = re.compile(r"(.)\1")
data = ["parrot","follia","carrot","mattia","rettoo","melone"]

for str in data:
    match = re.search(regexp, str)
    if match:
        print str, "<- match for double", match.group(1)
    else:
        print str, "<- doesn't match"
Run Code Online (Sandbox Code Playgroud)


Arv*_*ind 8

对于此类情况,您需要使用反向引用.我不确定您使用的是哪种语言,我在VI编辑器中尝试了以下示例来搜索任何重复的字母. 模式正则表达式: \([a-z]\)\1

如果您看到示例,[az]是您要搜索的模式,并将其包含在paranthesis中(parantheses应以某些语言进行转义).一旦你有一个paranthesis,它是一个组,可以通过使用\ 1再次在正则表达式的任何地方引用.如果有多个组,则可以使用\ 1,\ 2等.\ 1将替换为第一组中匹配的任何组.

谢谢Arvind