【发布时间】:2017-08-02 09:01:08
【问题描述】:
抱歉标题令人困惑,我将尝试通过示例来解释这一点。目前我们有这个表达式来查找字符串中的数字序列\b((\d[ ]{0,1}){13,19})\b
现在我想对其进行修改,使其符合这些规则
- 长度应在 13 到 19 个字符之间,不包括空格
- 每个号码簇必须至少有 3 位数字
表达式应将这些标记为匹配:
1234567890123
1234 5678 9012 345
不匹配:
123456789012 3
123 12 123 1 23134
我拥有的当前表达式会将它们全部标记为匹配。
Example
【问题讨论】:
-
为什么你认为正则表达式是这里的最佳选择?
-
为什么不直接删除空格,然后检查数字和长度?
-
这是一个正则表达式甚至可以用于的东西吗?我能想到的纯正则表达式中唯一的解决方案是列出所有可能的数字簇组合。你匹配什么样的源字符串?匹配所有数字/空白簇(具有最大长度)会更好(并且可能更快),然后在不使用正则表达式的情况下检查它们。
-
@Nino 如果要删除空格,那么我将无法区分哪个集群有效(包含 3 个或更多字符)。除了给定的字符串将不仅包含数字,还包含字母
-
@IllidanS4 源字符串来自 word 文档,因此大小很大,将包含各种字符。早期的实现是使用正则表达式,因此如果可能的话,我想尝试通过更新现有表达式来实现这一点