AttributeError:“非类型”|正则表达式

2024-06-09 10:14:36 发布

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

我不熟悉python扩展正则表达式。我试图创建一个小型python正则表达式项目,但遇到了一个问题。我在试着做一个电话号码检查器。如果您输入正确的号码,您将收到一封“谢谢”,但如果您输入随机号码(不是电话号码)或随机信函,则您将收到一封“重试”

问题是,如果我输入一个字母,那么我会收到一个AttributeError:“非类型”对象没有属性“组”。

我怎样才能解决这个问题?任何帮助都很好! 谢谢你花时间阅读这篇文章

Pastebin:https://pastebin.com/VzWMDgiU

代码:

import re
import time


print('Welcome, you have won 1 million dollars! Please verify your phone number!')
time.sleep(2)#sleep
content = input('Please enter your number:')
numberRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
result = numberRegex.search(content)
result.group()
time.sleep(3)#sleep
if result.group() == content:
       print('thank you')

if result.group() != content:
       print('try again')

Tags: importreyounumberyourtimegroup电话号码
2条回答

这是一个解决方案:

import re
import time


print('Welcome, you have won 1 million dollars! Please verify your phone number!')
time.sleep(2) #sleep
content = input('Please enter your number:')
# content = "111-111-1111"
numberRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
result = numberRegex.search(content)
if result is not None:
    time.sleep(3) #sleep
    if result.group() == content:
        print('thank you')

    if result.group() != content:
        print('try again')
else:
    print('try again')

另一个解决方案是处理异常的try/catch块

我猜它永远不会涉及到代码的这一部分:

if result.group() != content:
        print('try again')

但我暂时保留了它,因为我不太熟悉python的正则表达式库

这是一个辅助或外围答案。

根据您的问题,我假设您对所使用的工具有一定程度的理解,因此我认为以下内容可能对您有很大帮助

Regex已经很难阅读了,我建议通过使用repeats的模式使它更容易阅读

而不是使用模式

numberRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')

如果你确定某个特定的实例的数量 数字会重复, 为什么不使用:

numberRegex = re.compile(r'\d{3}-\d{3}-\d{4}')

模式\d{n}意味着正则表达式将寻找重复次数n的数字\d

和另一个

再加上其他人的答案,让你更仔细地研究一下,我认为你所经历的那种错误的术语是semantic error。您的程序正在做它应该做的事情,但可能您对regex函数/方法的工作方式缺乏了解,这就是为什么您没有“捕获”在实际输入与预期输入不同时生成的异常错误

附言。 在进行此项工作时,请尝试研究Python的命名约定 与其numberRegex,不如number_regexsource

相关问题 更多 >