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

2024-09-24 22:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

示例:
使用小写的6个字符的单词,我想匹配第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

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

有没有可能用regex做我想做的事?如果是,我该怎么做?

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


Tags: 示例formatch条件字符单词regexparrot
3条回答

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

(.)\1

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


编辑下面是一些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"

/(\b\w*?(\w)\2.*?\b)/

将在字符重复上至少匹配任何单词 一美元就是这个词 第一次重复2美元。

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

如果您看到这个例子,[a-z]是您正在搜索的模式,并将其包含在paranthesis中(paranthesis应该在某些语言中转义)。一旦您有了paranthesis,它就是一个组,可以在regex中的任何地方使用\1再次引用它。如果有多个组,您可以使用\1、\2 etc.\1将被第一个组中匹配的内容替换。

谢谢 阿文

相关问题 更多 >