Python正则表达式-仅允许使用大写和小写字符
我试图在python中验证一个名称,以便只允许使用大写和小写字母,我使用的代码如下所示。这段代码可以工作,不包括字符串开头的任何额外内容和字符串结尾的数字,但是它允许使用诸如“Ollie@”之类的内容,我不知道为什么。 任何帮助都将不胜感激。 干杯Python正则表达式-仅允许使用大写和小写字符,python,regex,Python,Regex,我试图在python中验证一个名称,以便只允许使用大写和小写字母,我使用的代码如下所示。这段代码可以工作,不包括字符串开头的任何额外内容和字符串结尾的数字,但是它允许使用诸如“Ollie@”之类的内容,我不知道为什么。 任何帮助都将不胜感激。 干杯 \b表示单词的开头或结尾。在示例Ollie@中,Ollie的结尾被视为单词的结尾 您可以尝试行开始^和行结束$^[a-zA-Z]+$@不是“单词字符”,因此它算作单词边界。它可能算作一个特殊的字符或标点符号或其他东西。如果您知道名称前后都会有文本,您
\b
表示单词的开头或结尾。在示例Ollie@
中,Ollie
的结尾被视为单词的结尾
您可以尝试行开始^
和行结束$
^[a-zA-Z]+$
@不是“单词字符”,因此它算作单词边界。它可能算作一个特殊的字符或标点符号或其他东西。如果您知道名称前后都会有文本,您可以匹配在Python中可能是\w
的空白,但不确定。如果你想要的名字两边可能有什么东西或什么东西都没有,它会变得更复杂。您可以使用一个或两个正则表达式来分离垃圾,如果需要,使用最后一个正则表达式来解析有效名称。根据,\b
“匹配空字符串,但仅在单词的开头或结尾”,这不是您想要的。这将与“Ollie@”匹配,因为“@”在单词末尾之后,而\b
匹配“e”和“@”之间的空字符串
请改为尝试r“[a-zA-Z]+$”
。来自:
单词的结尾由空格或非字母数字、非下划线Unicode字符表示
因此,您需要另一种方式来表示单词的结尾。您可能希望捕获这样一个组中的名称部分:
\b([a-zA-Z]+)\b
并使用组(1)引用该部分。尝试更改为r“[a-zA-Z]+$”
。现在可以使用了吗?谢谢:)您可以尝试使用行start^
-为什么?它可以防止相同的情况发生在字符串的开头,即@Ollie
那么,re.match
做什么呢?它会在字符串中找到该正则表达式的匹配项,但您需要指定匹配项必须以中的字符开头[a-zA-Z]
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的MatchObject实例。同样,^
在此处是多余的。检查:如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的MatchObject实例。
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)