首页 > 解决方案 > 正则表达式 - 查找每隔 n(固定)字符出现在另一个字符串中的字符串

问题描述

我的问题标题可能不清楚,所以我将尝试用几个例子来解释以更好地解释

我才刚刚开始使用正则表达式,并且想用它来匹配每隔 n 个字符在另一个字符串中出现(隐藏)的字符串,例如:

我们想在这个字符串中找到世界“你好”:

"h..e..l..l..o......"

请注意它如何每 2 个字符重复一次

我能够为此创建一个简单的正则表达式规则,如下所示:

"h.{2}e.{2}l.{2}l.{2}o"

但是,这仅每 2 步有效,我希望它有任意数量的步骤(或至少说最多 5 个) - 这样它也可以匹配如下字符串:

"h...e...l...l...o"

我所做的尝试:

"h.{1,5}e.{1,5}l.{1,5}l.{1,5}o"

然而,这并不能修复所有范围内的数字,所以即使它没有出现在固定间隔中,这个字符串也会通过:

"h..e..l.l..o"

注意 2 个 l 之间的单个字符。我唯一的另一个想法是使用循环来表示迭代 1 到 5 并尝试所有这些作为单独的正则表达式语句,但是尝试在这里询问是否有任何巧妙的方法可以使用正则表达式来做到这一点会很有用: )

感谢您的任何回复

标签: pythonregex

解决方案


我建议为此使用捕获组和反向引用:

h(\.{1,5})e\1l\1l\1o

正则表达式演示

(\.{1,5})在第一个字母之后将匹配 1 到 5 个点并在第 1 组中h捕获。之后我们在每个字符之间使用反向引用#1 \1,以确保我们在所有字母之间匹配相同数量的点。


推荐阅读