递归正则表达式检查字符串长度是否为3的幂?

时间:2016-04-19 19:43:59

标签: regex recursion

我正在尝试创建一个正则表达式模式,该模式只匹配仅包含句点(。)的字符串,其长度为3的幂。显然,我可以手动重复3次幂的长度检查,直到长度为no更长的可行性,但我更喜欢短暂的模式。

我编写了这个python方法来帮助解释我想要做的事情:

#n = length
def check(n):
    if n == 1:
        return True
    elif n / 3 != n / 3.0:
        return False
    else:
        return check(n / 3)

为了澄清,正则表达式应该只匹配........................................,(长度1,3,9,27)等。

我已经阅读了regex recursion,正在使用(?R),但我无法将任何可以正常运行的内容放在一起。

这可能吗?

1 个答案:

答案 0 :(得分:0)

可以使用正则表达式(处理任何字符,而不仅仅是句点):

def length_power_three(string):

    regex = r"."

    while True:
        match = re.match(regex, string)

        if not match:
            return False

        if match.group(0) == string:
            return True

        regex = r"(?:" + regex + r"){3}"

但我知道你真的想知道是否可以使用单个正则表达式完成。

更新

我忘了您要求提供递归解决方案:

def length_power_three(string, regex = r"."):
    match = re.match(regex, string)

    if not match:
        return False

    if match.group(0) == string:
        return True

    return length_power_three(string, r"(?:" + regex + r"){3}")