Regex Lookahead,最多只能看一位数

Esl*_*tti 3 .net c# regex regex-lookarounds

我正在寻找创建RegEx模式

  • 8个字符 [a-zA_Z]
  • 必须在字符串的任何位置只包含一位数字

我创建了这个模式:

^(?=.*[0-9].*[0-9])[0-9a-zA-Z]{8}$
Run Code Online (Sandbox Code Playgroud)

这种模式工作正常,但我只想要一个数字.例:

aaaaaaa6   match
aaa7aaaa   match

aaa88aaa   don't match
aaa884aa   don't match
aaawwaaa   don't match
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 8

你可以改用:

^(?=[0-9a-zA-Z]{8})[^\d]*\d[^\d]*$
Run Code Online (Sandbox Code Playgroud)

第一部分断言匹配包含8个字母或数字.一旦确保这一点,第二部分确保匹配中只有一个数字.

编辑:说明:

  • ^$表示开始和字符串的结尾.
  • (?=[0-9a-zA-Z]{8}) 断言该匹配包含8个字母或数字.
  • [^\d]*\d[^\d]*意味着只有一个数字字符和剩余的非数字字符.由于我们已经断言输入包含数字或字母,因此这里的非数字字符是字母表.