我目前正在为ArcMap 10(updateMessages)中的工具参数编写验证代码,并且需要阻止用户在字符串中使用非字母数字字符,因为它将用于命名要素类中新创建的字段。
我到目前为止使用的是'str.isalnum()',但这当然不包括下划线。是否有一种只接受字母数字字符和下划线的有效方法?
if self.params[3].altered:
#Check if field name already exists
if str(self.params[3].value) in [f.name for f in arcpy.ListFields(str(self.params[0].value))]:
self.params[3].setErrorMessage("A field with this name already exists in the data set.")
#Check for invalid characters
elif not str(self.params[3].value).isalnum():
self.params[3].setErrorMessage("There are invalid characters in the field name.")
else:
self.params[3].clearMessage()
return
答案 0 :(得分:3)
尝试正则表达式:
import re
if re.match(r'^[A-Za-z0-9_]+$', text):
# do stuff
答案 1 :(得分:2)
import re
if re.match(r'^\w+$', text):
答案 2 :(得分:0)
如果您使用的是Python3,并且字符串中存在非ASCII字符,则最好使用8位字符串设置编译正则表达式。
import sys
import re
if sys.version_info >= (3, 0):
_w = re.compile("^\w+$", re.A)
else:
_w = re.compile("^\w+$")
if re.match(_w, text):
pass
有关详细信息,请参阅here。
答案 3 :(得分:0)
另一种方法,在这种特定情况下不使用正则表达式:
if text.replace('_', '').isalnum():
# do stuff
您也可以只检查 ASCII 字符:
if text.replace('_', '').isalnum() and text.isascii():
# do stuff