尝试在将其作为正则表达式练习返回之前检查格式正确的名称字符串。它捕获诸如
之类的字符串'bob1' '55bob' 'b64ob' etc.
但不会捕获非字母数字输入,例如 bob!
。我原以为 [a-z]+
部分会处理这个问题,查看文档。我一定是忽略了什么,有什么帮助吗?谢谢。
def get_name(self):
"""Returns the user-name if valid"""
match_obj = re.match(r'\b[a-z]+\b', self.name, re.I)
if match_obj is None:
raise ValueError('Matching name not found')
return self.name
最佳答案
边界 \b
查找 \w
字符序列的开头或结尾。要了解什么是 \w
字符,您可以查看。
>>> import re
>>> re.match('\w+', 'bob!')
<_sre.SRE_Match object; span=(0, 3), match='bob'>
>>> re.match('\w+', "there's")
<_sre.SRE_Match object; span=(0, 5), match='there'>
它匹配字母但不匹配标点符号。所以回到你的正则表达式 \b[a-z]+\b
。如果我要在花括号中围绕 bob!
绘制边界,它将看起来像 {bob}!
。所以正则表达式确实与结果 bob
匹配。
这解释了是什么让您的正则表达式按照它的方式运行。但是不清楚如何回答你的问题,因为你还没有告诉我们你想要它做什么。假设您想检查字符串是否包含 a-z
和 A-Z
并且没有别的 我会回应使用 ^[a-z] 的建议+$
。这里,^
标记字符串的开始,$
标记结束。
关于Python Regex - 不捕获非字母数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35052636/