正则表达式模式以匹配有限的长度

Kir*_*kov 1 .net regex powershell

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

'1aa21' -match '(\d+)+[a-z]|[a-z]+(\d+)'
Run Code Online (Sandbox Code Playgroud)

我尝试在末尾添加{5},也添加\ S {5},依此类推。它似乎不起作用。什么是达到期望的最佳方法?

bob*_*ble 5

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

^(?=\S{5}$)(?=\D*\d)\d*[a-z][a-z\d]*$
Run Code Online (Sandbox Code Playgroud)
  • (?=\S{5}$)$在5个非空格字符之后向前看结尾
  • (?=\D*\d) 在任意数量的非数字之后向前看数字
  • \d*[a-z][a-z\d]* 匹配任意数量的数字,后跟字母和任何数字

在regexstorm上观看此演示。对于无用的匹配,请添加(?i)标志

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

^(?=\D*\d)(?=\d*[a-z])[a-z\d]{5}$
Run Code Online (Sandbox Code Playgroud)

或交替使用一个负前瞻。

^(?!\d*$|[a-z]*$)[a-z\d]{5}$
Run Code Online (Sandbox Code Playgroud)

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