Python正则表达式 - 不捕捉非字母数字

时间:2016-01-28 04:00:57

标签: python regex

尝试检查格式正确的名称字符串,然后将其作为正则表达式中的练习返回。它捕捉到诸如

之类的字符串
  

'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

3 个答案:

答案 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

在这种情况下,会为bo1bbob!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}!匹配。

这是对你的正则表达式如何表现的解释。但目前尚不清楚如何回答你的问题,因为你没有告诉我们你想要它做什么。假设您要检查字符串是否包含boba-z以及其他,我会回应建议使用A-Z。在这里,^[a-z]+$标记字符串的开头,^标记结束。