问题:
使用正则表达式,是否可以匹配在不同位置包含相同字符的单词?
条件:
所有单词都有相同的长度,你知道重复字符的字符位置(例如第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)
对于此类情况,您需要使用反向引用.我不确定您使用的是哪种语言,我在VI编辑器中尝试了以下示例来搜索任何重复的字母.
模式正则表达式: \([a-z]\)\1
如果您看到示例,[az]是您要搜索的模式,并将其包含在paranthesis中(parantheses应以某些语言进行转义).一旦你有一个paranthesis,它是一个组,可以通过使用\ 1再次在正则表达式的任何地方引用.如果有多个组,则可以使用\ 1,\ 2等.\ 1将替换为第一组中匹配的任何组.
谢谢Arvind