如何编写此正则表达式以匹配整个字符串?

时间:2013-12-29 17:19:30

标签: python regex

我有一个字符串,由3个小写字符组成,用下划线分隔。这些都是有效的例子:

abc
abc_def
abc_def_ghi

这些不是:

abc_
abc_ab
abc_123

我写了一个正则表达式:

>>> def test_string(test):
...    import re
...    pc = re.compile("[a-z]{3}(_[a-z]{3})*")
...    if pc.match(test):
...        return True
...    else:
...        return False
...
>>> print test_string('abc')
True    # Okay
>>> print test_string('ab')
False   # Okay
>>> print test_string('abc_')
True    # Not Okay 

但它并不排除我不想要的案例。

我如何编写一个函数来测试字符串是否为我喜欢的形式,而不是我不想要的形式?

2 个答案:

答案 0 :(得分:3)

您只需添加锚点字符,以便匹配字符串的开头和结尾,如:

^[a-z]{3}(_[a-z]{3})*$

更新:在这种情况下,^锚在Python中是多余的,正如@Jerry在其他答案中指出的那样。

答案 1 :(得分:3)

您只需在正则表达式中添加行结束$

re.compile("[a-z]{3}(_[a-z]{3})*$")

这确保匹配匹配后没有别的东西。

您不需要行锚点(^)的开头,因为默认情况下match会尝试在字符串的开头匹配。