【问题标题】:Regex pattern to match limited length匹配有限长度的正则表达式模式
【发布时间】:2017-12-28 15:27:43
【问题描述】:

我有一些由任意随机顺序的字符和数字组成的数据。一件事是肯定的,它必须同时包含数字和字符。我制作了一个匹配这种情况的正则表达式。我现在想更进一步,将其限制为仅包含 5 个符号的字符串。

'1aa21' -match '(\d+)+[a-z]|[a-z]+(\d+)'

我尝试在末尾添加 {5} 和 \S{5} 等等。 它似乎不起作用。达到目标的最佳方式是什么?

【问题讨论】:

  • 您的问题不清楚。样本输入和预期输出是什么?

标签: .net regex powershell


【解决方案1】:

我们可以在字符串的开头使用两个lookaheads。一种用于检查 5 个字符的固定长度,另一种用于检查至少一位数字。字母可以在模式内匹配。

^(?=\S{5}$)(?=\D*\d)\d*[a-z][a-z\d]*$
  • (?=\S{5}$) 在 5 个非空白字符后查找 $ 结束
  • (?=\D*\d) 在任意数量的非数字之后寻找一个数字
  • \d*[a-z][a-z\d]* 匹配任意数量的数字,后跟一个字母和任意数字

See this demo at regexstorm。对于无大小写匹配add the (?i) flag

有不同的选项如何组合前瞻和匹配的内容。另一种方法是使用前瞻检查数字和字母并匹配 5 个字母数字字符。

^(?=\D*\d)(?=\d*[a-z])[a-z\d]{5}$

或者交替使用一个负前瞻。

^(?!\d*$|[a-z]*$)[a-z\d]{5}$

取决于输入,哪一个性能最佳。

【讨论】:

    猜你喜欢
    • 2016-04-02
    • 2021-06-26
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2023-03-27
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多