我有一个字符串,由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
但它并不排除我不想要的案例。
我如何编写一个函数来测试字符串是否为我喜欢的形式,而不是我不想要的形式?
答案 0 :(得分:3)
您只需添加锚点字符,以便匹配字符串的开头和结尾,如:
^[a-z]{3}(_[a-z]{3})*$
更新:在这种情况下,^
锚在Python中是多余的,正如@Jerry在其他答案中指出的那样。
答案 1 :(得分:3)
您只需在正则表达式中添加行结束$
:
re.compile("[a-z]{3}(_[a-z]{3})*$")
这确保匹配匹配后没有别的东西。
您不需要行锚点(^
)的开头,因为默认情况下match
会尝试在字符串的开头匹配。