我想匹配每个第二个字符都相同的字符串。 例如'abababababab'
我已经尝试过:'''(([[a-z])[^ / 2])*'''
输出应返回完整的字符串,就像'abababababab'
答案 0 :(得分:1)
您可以匹配第一个[a-z]
,然后在组中捕获([a-z])
。然后重复0+次,再次匹配a-z和对组1的向后引用,以使第二个字符保持相同。
^[a-z]([a-z])(?:[a-z]\1)*$
说明
^
字符串的开头[a-z]([a-z])
匹配a-z并捕获与a-z匹配的组1 )(?:[a-z]\1)*
重复0多次匹配a-z,然后反向引用第1组$
字符串结尾答案 1 :(得分:1)
在状态正则表达式中,多项式的数量与字母大小成多项式,这实际上是不可能的,因为该表达式不是Chomsky 0级语法。
但是,Python的正则表达式实际上不是正则表达式,并且可以处理比这更复杂的语法。特别是,您可以将语法如下。
(..)\1*
(..)
是2个字符的序列。 \1*
匹配任意一对(可能为null)次数的确切字符对。
我将您的问题解释为希望其他所有字符都相等(ababab有效,但abcbdb失败)。如果只需要第2、4,...个字符相等,则可以使用类似的字符。
.(.)(.\1)*
答案 2 :(得分:0)
尽管不是正则表达式的答案,您可以执行以下操作:
def all_same(string):
return all(c == string[1] for c in string[1::2])
string = 'abababababab'
print('All the same {}'.format(all_same(string)))
string = 'ababacababab'
print('All the same {}'.format(all_same(string)))
string[1::2]
说从第二个字符(1
)开始,然后每第二个字符(2
部分)退出。
这将返回:
All the same True
All the same False
答案 3 :(得分:0)