用交替字符匹配字符串

2024-10-01 22:27:59 发布

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

我想匹配每一个字符都相同的字符串。 例如“abababab”

我试过这个:''(([a-z])[^/2])*''

输出应该返回完整的字符串,就像“ababab”


Tags: 字符串字符ababababababab
3条回答

这在一个真正的正则表达式中是不可能做到的,因为这个表达式不是乔姆斯基的0级语法。你知道吗


然而,Python的正则表达式实际上并不是正则表达式,并且可以处理比正则表达式复杂得多的语法。特别是,你可以把你的语法如下。你知道吗

(..)\1*

(..)是由2个字符组成的序列。\1*将精确的字符对匹配任意(可能为空)次。你知道吗


我把你的问题解释为希望其他所有角色都是平等的(ababab可行,但abcbdb失败)。如果你只需要第二,第四。。。要使字符相等,可以使用类似的字符。你知道吗

.(.)(.\1)*

您可以匹配组中的第一个[a-z],然后捕获([a-z])。然后重复0+次再次匹配a-z和对组1的反向引用,以保持每秒钟字符相同。你知道吗

^[a-z]([a-z])(?:[a-z]\1)*$

解释

  • ^字符串的开头
  • [a-z]([a-z])匹配a-z并在第1组中捕获匹配a-z
  • )(?:[a-z]\1)*重复0+次匹配a-z,然后返回到组1
  • $字符串结尾

Regex demo

虽然不是正则表达式的答案,但您可以这样做:

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

相关问题 更多 >

    热门问题