我有一个字符串,由 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
但不排除我不想要的情况。
我如何编写一个函数来测试字符串是我想要的形式,而不是我不想要的形式?
请您参考如下方法:
您只需要在您的正则表达式中添加行尾 anchor $:
re.compile("[a-z]{3}(_[a-z]{3})*$")
这确保匹配的内容匹配后没有其他内容。
您不需要行首 anchor (^),因为默认情况下 match 会尝试匹配字符串的开头。
