尝试检查格式正确的名称字符串,然后将其作为正则表达式中的练习返回。它捕捉到诸如
之类的字符串'bob1''55bob''b64ob'等。
但是不会捕获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
答案 0 :(得分:2)
只允许包含字母组成的名字(我认为这就是你要问的,我可能错了)......
def get_name(self):
"""Returns the user-name if valid"""
match_obj = re.search(r'^[a-z]+$', self.name, re.I)
if match_obj is None:
raise ValueError('Matching name not found')
return self.name
在这种情况下,会为bo1b
,bob!
,2bob
等
答案 1 :(得分:2)
match_obj = re.match(r'\b[a-z]+$', self.name, re.I)
match
从字符串的start
开始并比较并给出匹配项,如果它可以匹配来自start的0个或更多字符。要使完整匹配使用$
而不是{{1 }。
答案 2 :(得分:2)
边界int
main (void)
{
char st1[8192];
char st2[8192];
getcontext(&ctx[1]);
ctx[1].uc_stack.ss_sp = st1;
ctx[1].uc_stack.ss_size = sizeof st1;
ctx[1].uc_link = &ctx[0];
makecontext(&ctx[1], f1, 0);
getcontext(&ctx[2]);
ctx[2].uc_stack.ss_sp = st2;
ctx[2].uc_stack.ss_size = sizeof st2;
ctx[2].uc_link = &ctx[1];
makecontext(&ctx[2], f2, 0);
getcontext(&ctx[0]);
ctx[0].uc_mcontext.gregs[16] += 0x26;
puts("finish main");
setcontext(&ctx[2]);
return 0;
}
查找\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]+$
标记字符串的开头,^
标记结束。