用交替字符匹配字符串

时间:2019-06-28 14:50:29

标签: python regex

我想匹配每个第二个字符都相同的字符串。 例如'abababababab'

我已经尝试过:'''(([[a-z])[^ / 2])*'''

输出应返回完整的字符串,就像'abababababab'

4 个答案:

答案 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组
  • $字符串结尾

Regex demo

答案 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)

这是一个有点复杂的表达,也许我们将从以下内容开始:

^(?=^[a-z]([a-z]))([a-z]\1)+$

如果我理解正确的问题。

Demo