用于强制字符串包含英文字母和数字的正则表达式

2024-09-30 05:28:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

regex '^[A-Z0-9]{8}$'是不够的,因为它允许使用'ABCDEFGH'或{}这样的单词。如何创建一个regex,使它只接受8个同时包含大写字母和数字的字符串,比如'AB123C7Q'?在


Tags: 字符串字母数字大写字母单词regex个字符z0
2条回答

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

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

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会话中):

^{pr2}$

您需要以lookahead的形式在正则表达式中添加2个条件(断言):

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

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

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

相关问题 更多 >

    热门问题