c# - 正则表达式向前看和向后看最多一位数

标签 c# .net regex regex-lookarounds

我正在寻找创建 RegEx 模式

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

我创建了这个模式:

^(?=.*[0-9].*[0-9])[0-9a-zA-Z]{8}$

此模式工作正常,但我只希望允许一个数字。示例:

aaaaaaa6   match
aaa7aaaa   match

aaa88aaa   don't match
aaa884aa   don't match
aaawwaaa   don't match

最佳答案

您可以改用:

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

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

编辑:解释:

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

关于c# - 正则表达式向前看和向后看最多一位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22435978/

相关文章:

c# - 需要大写但出现问题的工具提示

c# - 组装 ... 内部和外部命名空间

regex - R gsub 单双引号

c# - 对 RegEx 帮助不大

c# - 应用程序的业务层是否应该能够访问 Session 对象?

c# - WPF 设置父级(窗口)

c# - 使用 Linq 相交和求和列表

c# - 您如何检测文件何时被放入 Windows 资源管理器?

用于平面图设计器应用程序的 .NET 组件

regex - 删除单词之间的重复字符