我尝试在python中验证一个名称,使其只允许大写和小写字母,我使用下面显示的代码。这段代码可以工作并排除字符串开头的任何额外内容和字符串末尾的数字,但是它允许使用诸如“奥利@”之类的内容,我无法解释原因。 任何帮助都将不胜感激。 干杯
MatchObjectForename = re.match(r"\b[a-zA-Z]+\b", self.txtForename.get())
print(MatchObjectForename)
if MatchObjectForename == None:
Incorrect.append(self.txtForename)
else:
Correct.append(self.txtForename)
您可能希望捕获像这样的组中的名称部分:
\b([a-zA-Z]+)\b
,并使用group(1)引用它。在根据Python RegEx docs,
\b
“匹配空字符串,但只在单词的开头或结尾”,这不是您想要的。这将匹配“Ollie@”,因为“@”是“单词末尾之后”,而\b
匹配“e”和“@”之间的空字符串。在请改为尝试
r"[a-zA-Z]+$"
。在@不是“单词字符”,因此它被视为单词边界。它可能被认为是一个特殊的字符或标点符号之类的。如果您知道名称前后都有文本,那么您可以匹配空白,在Python中可能是
\w
,不确定。如果你想要的名字的两边都有什么东西或者什么都没有,它会变得更复杂。如果需要,可以使用一个或两个正则表达式来分割垃圾,最后一个正则表达式用于解析有效名称。在相关问题 更多 >
编程相关推荐