用于检查python中重复次数是否相同的正则表达式

2024-06-10 20:39:26 发布

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

我有两个复杂的(可能是重复的)组(ab)和(cd)

abcd是有效的 abababcdcdcd是有效的

但是: ababcd无效 abcdcd无效

我的想法是用|重复: ((ab){1}(cd){1})|((ab){2}(cd){2})|((ab){3}(cd){3})|((ab){4}(cd){4})等等

我想知道是否有一种有效的方法来写这个表达式


Tags: 方法ab表达式cdabcdabcdcdababcdabababcdcdcd
2条回答

在这种情况下,有一种方法,但只能针对需求量身定做

关键假设

  • 字符串的块只有两个子字符串“ab”和“cd”
  • 所有重复出现的“ab”和“cd”都单独聚集在一起
  • “cd”总是在“ab”之后

如果这是真的,那么下面的代码将起作用。不太优雅。等待大师给出更好的解决方案

def CheckValid(String):
    Split_1 = String.split("ab")
    LeftStringCount = len(Split_1[:-1])
    RightStringCount = len(Split_1[-1].split("cd"))-1 ## -1 to account for the extra blank in the result
    if LeftStringCount == RightStringCount:
        print("Valid string")
    else:
        print("Invalid string")
        

CheckValid("abababcdcdcd")
CheckValid("abcd")
CheckValid("abcdcd")
CheckValid("ababcd")

给出以下输出

Valid string
Valid string
Invalid string
Invalid string

例如,可以使用递归表达式

import regex

# example:
example_string = "ababababcdcdcdcd"

# regular expression that consumes the whole string
regex.match(r"^(ab(?1)cd|abcd)$", example_string)

如果要将表达式作为子字符串匹配(不使用整个字符串),可以不使用^$,即"(ab(?R)cd|abcd)

相关问题 更多 >