2024-10-01 22:27:59 发布
网友
我想匹配每一个字符都相同的字符串。 例如“abababab”
我试过这个:''(([a-z])[^/2])*''
输出应该返回完整的字符串,就像“ababab”
这在一个真正的正则表达式中是不可能做到的,因为这个表达式不是乔姆斯基的0级语法。你知道吗
然而,Python的正则表达式实际上并不是正则表达式,并且可以处理比正则表达式复杂得多的语法。特别是,你可以把你的语法如下。你知道吗
(..)\1*
(..)是由2个字符组成的序列。\1*将精确的字符对匹配任意(可能为空)次。你知道吗
(..)
\1*
我把你的问题解释为希望其他所有角色都是平等的(ababab可行,但abcbdb失败)。如果你只需要第二,第四。。。要使字符相等,可以使用类似的字符。你知道吗
.(.)(.\1)*
您可以匹配组中的第一个[a-z],然后捕获([a-z])。然后重复0+次再次匹配a-z和对组1的反向引用,以保持每秒钟字符相同。你知道吗
[a-z]
([a-z])
^[a-z]([a-z])(?:[a-z]\1)*$
解释
^
[a-z]([a-z])
)(?:[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部分)。你知道吗
string[1::2]
1
2
这将返回:
All the same True All the same False
这在一个真正的正则表达式中是不可能做到的,因为这个表达式不是乔姆斯基的0级语法。你知道吗
然而,Python的正则表达式实际上并不是正则表达式,并且可以处理比正则表达式复杂得多的语法。特别是,你可以把你的语法如下。你知道吗
(..)
是由2个字符组成的序列。\1*
将精确的字符对匹配任意(可能为空)次。你知道吗我把你的问题解释为希望其他所有角色都是平等的(ababab可行,但abcbdb失败)。如果你只需要第二,第四。。。要使字符相等,可以使用类似的字符。你知道吗
您可以匹配组中的第一个
[a-z]
,然后捕获([a-z])
。然后重复0+次再次匹配a-z和对组1的反向引用,以保持每秒钟字符相同。你知道吗解释
^
字符串的开头[a-z]([a-z])
匹配a-z并在第1组中捕获匹配a-z)(?:[a-z]\1)*
重复0+次匹配a-z,然后返回到组1$
字符串结尾Regex demo
虽然不是正则表达式的答案,但您可以这样做:
string[1::2]
表示从第二个字符(1
)开始,然后每隔第二个字符拉出一个字符(2
部分)。你知道吗这将返回:
相关问题 更多 >
编程相关推荐