首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行字符串的Regex包含英文字母和数字。

问执行字符串的Regex包含英文字母和数字。
EN

Stack Overflow用户
提问于 2018-12-23 15:09:13
回答 2查看 1.2K关注 0票数 0

我试图创建一个正则表达式,用于接受由字母和数字组成的8个字符的字符串,而不仅仅是字母或数字。

正则表达式'^[A-Z0-9]{8}$'是不够的,因为它允许像'ABCDEFGH'或'12345678'这样的单词。如何创建正则表达式,使其只接受包含大写字母和数字(如'AB123C7Q' )的8个字符串

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-23 15:17:56

您需要以前瞻的形式在regex中添加两个条件(断言)

代码语言:javascript
复制
^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8}$

这里使用了两个前瞻性断言:

  • (?=.*[a-zA-Z]):断言我们前面有一封信
  • (?=.*\d):断言我们最后有一位数在前面
票数 4
EN

Stack Overflow用户

发布于 2018-12-23 16:33:02

下面是Python社区使用内置的str.isalnum和str.isdigit函数提供更快的pythonic解决方案的替代方案:

名为checkalnum的自定义函数(“检查字符串是否包含字母数字”):

代码语言:javascript
复制
def checkalnum(test_str: str):
    if not test_str.isalnum() or len(test_str) != 8:
        return False

    has_digit, has_letter = False, False
    for c in test_str:
        if c.isdigit(): has_digit = True
        else: has_letter = True

        if has_digit and has_letter:
            return True
    return False

时间性能比较(在IPython会话中):

代码语言:javascript
复制
In [811]: test_str = 'AB123C7Q'

In [812]: %timeit re.search(r'^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8}$', test_str)
1.88 µs ± 284 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [813]: %timeit checkalnum(test_str)
992 ns ± 87.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [814]: 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53904702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档