Python正则表达式用于Java包名
我在用Python判断有效的Java包名时遇到了一些问题。以下是我的代码:
packageName = "com.domain.lala" # valid, not rejected -> correct
#packageName = ".com.domain.lala" # invalid, rejected -> correct
#packageName = "com..domain.lala" # invalid, not rejected -> incorrect
#packageName = "com.domain.lala." # invalid, not rejected -> incorrect
matchObject = re.match("([a-z_]{1}[a-z0-9_]*(\.[a-z_]{1}[a-z0-9_]*)*)",
packageName)
if matchObject is not None:
print packageName + " is a package name!"
else:
print packageName + " is *not* a package name!"
Utilities.show_error("Invalid Package Name", "Invalid package name " + packageName + "!", "Ok", "", "")
包名必须以小写字母或下划线开头,每个点后面必须至少跟一个小写字母或下划线。其他字符可以是小写字母、数字或下划线。不能有连续的点,也不能以点开头或结尾。
我该怎么解决这个问题呢?
5 个回答
2
你需要在文本的开始和结束位置加上标记。所以正则表达式应该是这样的 -
^([a-z_]{1}[a-z0-9_]*(\.[a-z_]{1}[a-z0-9_]*)*)$
3
其实在Java的包名中是可以使用大写字母的。虽然不太推荐这样做,但实际上是可以正常工作的。
你可以使用的正则表达式是:
^([a-zA-Z_]{1}[a-zA-Z0-9_]*(\\.[a-zA-Z_]{1}[a-zA-Z0-9_]*)*)?$
4
在正则表达式的末尾加上$
,这样可以强制要求匹配整个字符串。目前,它只匹配部分字符串,所以会错误地接受那些在后面加了无效字符的有效包名。