Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式-仅允许使用大写和小写字符_Python_Regex - Fatal编程技术网

Python正则表达式-仅允许使用大写和小写字符

Python正则表达式-仅允许使用大写和小写字符,python,regex,Python,Regex,我试图在python中验证一个名称,以便只允许使用大写和小写字母,我使用的代码如下所示。这段代码可以工作,不包括字符串开头的任何额外内容和字符串结尾的数字,但是它允许使用诸如“Ollie@”之类的内容,我不知道为什么。 任何帮助都将不胜感激。 干杯 \b表示单词的开头或结尾。在示例Ollie@中,Ollie的结尾被视为单词的结尾 您可以尝试行开始^和行结束$^[a-zA-Z]+$@不是“单词字符”,因此它算作单词边界。它可能算作一个特殊的字符或标点符号或其他东西。如果您知道名称前后都会有文本,您

我试图在python中验证一个名称,以便只允许使用大写和小写字母,我使用的代码如下所示。这段代码可以工作,不包括字符串开头的任何额外内容和字符串结尾的数字,但是它允许使用诸如“Ollie@”之类的内容,我不知道为什么。 任何帮助都将不胜感激。 干杯


\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)