regex - 正则表达式 - 在任何 m 字母窗口中匹配 n 次出现的子字符串
问题描述
我正面临一些问题,形成一个正则表达式,该正则表达式在输入字符串的 m 个字符内匹配给定模式的至少 n 次。例如假设我的输入字符串是:
00000001100000001110111100000000000000000000000000000000000000000000000000110000000111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100
我想检测输入字符串中 1 至少出现 7 次(不一定连续)但在最多 20 个字符的窗口内的所有情况。
到目前为止,我已经构建了这个表达式:
(1[^1]*?){7,}
它检测输入字符串中 1 至少出现 7 次的所有情况,但这现在与以下两种情况都匹配:
11000000011101111
和
1100000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011
部分,而我只希望保留第一个,因为它位于由少于 20 个字符组成的子字符串中。
它试图将上述正则表达式与:
(?=(^[01]{0,20}))
也只匹配包含长度不超过 20 个字符的“1”或“0”的字符串的一部分,但是当我这样做时它停止工作。
有没有人有一个想法来完成这个?我已将此示例放在regex101中作为快速参考。
非常感谢!
解决方案
如果不列出所有可能的字符串,这不是可以用正则表达式完成的。您将需要迭代字符串。
您还可以遍历匹配项。Python 中的示例:
import re
matches = re.finditer(r'(?=((1[^1]*?){7}))', string)
matches = [match.group(1) for match in matches if len(match.group(1)) <= 20]
推荐阅读
- reactjs - 在一行中渲染网格项目 - ReactJS 和 Material-UI
- c - List *next 指针未指向另一个节点,返回 3221226356
- flutter - Flutter google map 如何在 GoogleMap 的小部件 onCreated 函数之外实例化 GoogleMapController 以进行测试?
- python - pylatex:如何更改文档的字体大小?
- swift - 加速度计数据从十六进制到浮点数
- javascript - 从 Vue 方法更新 FabricJS 对象
- python-3.x - 为什么我的不和谐机器人一次发送多条消息?
- python - 从 eded 消息中获取内容?
- javascript - 发布 500(内部服务器错误)第 48 行 app.js 和错误 SyntaxError: Unexpected token < in JSON at position 0 line 65 in app.js
- python - 使用 twitter API 时创建 pickle 文件