首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测字符串python中字母之间的数字

检测字符串python中字母之间的数字
EN

Stack Overflow用户
提问于 2022-08-20 16:12:49
回答 3查看 129关注 0票数 2

我编写了一个代码来验证汽车的车牌,要达到这个目的有一些条件:

第一个字母不应该是0

  • It,字母之间不应该有任何数字(AAA12是可以的,但是AA2AAA不是。)

  • 它应该从两个字母

  • 开始,字母的计数必须在2-6个字母

F 212之间。

代码语言:javascript
复制
def is_valid(s):
    s = s.lower()
    if len(s) >= 2 and len(s) <= 6 and s[0] != 0 and s[0:2].isalpha():
        if s.isalpha():
            return True
        elif s.isalnum():
            for sq in s.split():
                for w in sq:
                    if w.isdigit():
                        x = sq.index(w)
                        try:
                            if s[w:].isalpha():
                                return False
                            else:
                                return True
    
                        except:
                            return True

因此,我的代码正在以正确的方式执行大多数这些条件,但是当我输入例如HL23P2时,我希望得到False,但它返回True

它为什么返回False?因为我不能只有字母之间的数字,所以当它类似于HEL23时是允许的。

但是我怎么能检测字母之间的数字呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-08-20 19:30:25

我认为,这个没有正则表达式的解决方案是可以的:

代码语言:javascript
复制
def is_valid(s):
    meetNumber = False
    if len(s) >= 2 and len(s) <= 6 and s[0:2].isalpha():
        for i in range(2, len(s)):
            if s[i].isnumeric():
                meetNumber = True
            elif meetNumber == True:
                return False
        return True
    else:
        return False

print(is_valid(input()))
票数 1
EN

Stack Overflow用户

发布于 2022-08-20 16:31:29

试一试如下:

代码语言:javascript
复制
import re

def is_valid(s):
    return bool(re.search(r'^(?=.{2,6}$)[A-Z]{2,}\d*$', s))

print([is_valid(el) for el in ['AAA12', 'AA2AAA', 'HL23P2', 'HEL23']])

指纹:

代码语言:javascript
复制
[True, False, False, True]

所使用的正则表达式意味着:

  • ^ -启动string;
  • (?=.{2,6}$) -正向查找以匹配2-6个字符,直到结束字符串锚点(满足您对2-6个字符total);
  • [A-Z]{2,} - 2+大写字母的要求)(请满足至少以2 alphachars);
  • \d* - 0+数字开头的要求(允许您的要求在字符之间没有数字,但只能在end);
  • $ - end-string锚点上使用。

)

票数 0
EN

Stack Overflow用户

发布于 2022-08-20 19:31:28

以下是正确的答案:

代码语言:javascript
复制
def is_valid(s):
    if 2 <= len(s) <= 6 and s[0:2].isalpha() and s.isalnum():
        for item in s:
            if item.isdigit():
                pos = s.index(item)
                if s[pos:].isdigit() and int(item) != 0:
                    return True
                else:
                    return False

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

https://stackoverflow.com/questions/73428241

复制
相关文章

相似问题

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