regex - 给定字符串的重新排序字符的正则表达式
问题描述
我试图找到一个匹配重新排序的字符串的正则表达式0046711766
。所以,正好有两个 0、两个 1、一个 4、三个 6 和两个 7,顺序不限。在搜索 StackOverflow 之后,我做了这个
(?=([^0]*0){2}) (?=([^1]*1){2}) (?=([^6]*6){3}) (?=([^7]*7){2}) (?=.*4) [01467]{10}
这似乎做的工作。但我之前没有积极的前瞻经验,可能有更有效的方法来做到这一点。据我了解,我的条件的最大限制实际上是在最后,这对于在数据库中应用这种搜索是不利的。
解决方案
确实,最大的限制条件当前位于末尾,但如果它位于开头,您将无法使用前瞻断言(您需要后向断言)。
但是后向断言需要是固定宽度的(有一些例外,例如在 Java 中),所以你不能在这里真正使用它们。
不过,您可以做一件事,那就是对主要条件使用前瞻断言。
因此,这是您当前的解决方案,稍有改进(演示):
(?=([^0]*0){2})(?=([^1]*1){2})(?=[^4]*4)(?=([^6]*6){3})(?=([^7]*7){2})[01467]{10}
这是带有额外前瞻(演示)的版本(编辑:我使前瞻内的组不捕获):
(?=[01467]{10})(?=(?:[^0]*0){2})(?=(?:[^1]*1){2})(?=[^4]*4)(?=(?:[^6]*6){3})(?=(?:[^7]*7){2}).{10}
推荐阅读
- regex - Perl 中的 // 正则表达式究竟做了什么?
- asp.net-core - 从.net core 5中的视图访问控制器实例
- android - 为什么gradle没有同步成功
- node.js - writeQuery 不更新缓存
- django - 无法使用和设置 django-instagram 包
- github - 拉取请求已获批准但未合并
- hubspot - UploadFileAPI 在 hubspot 中突然停止工作
- reactjs - Redux/Thunk - 异步获取功能问题
- django - 在 django 中提交单选按钮表单时出现 UnboundLocalError
- ios - 如何将事件从 Observable 转发到 PublishSubject?