我尝试写一个正则表达式来接受包含a-z A-Z的名字,但也有一些名字可能包含连字符或撇号。我有这个到目前为止,它不匹配任何东西:
(^[a-zA-Z]['][-]$)
kmbjn2e31#
你的正则表达式^[a-zA-Z]['][-]$匹配一个后面跟着'和-的字母,比如a'-。您需要添加量词和一个可选组(*将允许0次或多次出现),例如
^[a-zA-Z]['][-]$
'
-
a'-
*
^[a-zA-Z]+(?:['-][a-zA-Z]+)*$ ^^^^^^^^^^^^^^^^^^^
请参阅regex demo
Debuggex Demo该模式锚定整个匹配(它应该匹配整个字符串),它匹配1个或多个字母([a-zA-Z]+),然后匹配'或-(由于['-])的 *0次或多次出现 *,后跟1+个字母。
[a-zA-Z]+
['-]
k5hmc34c2#
请使用以下命令:
^[a-zA-Z'-]+$
Demo
ukdjmx9f3#
first_name = input("Enter first name: ") try: if not re.search("^[A-Za-z'- ]+$", first_name): raise ValueError: except ValueError: print("Invalid first name, must use letters or acceptable name symbols") else: break
3条答案
按热度按时间kmbjn2e31#
你的正则表达式
^[a-zA-Z]['][-]$
匹配一个后面跟着'
和-
的字母,比如a'-
。您需要添加量词和一个可选组(
*
将允许0次或多次出现),例如请参阅regex demo
Debuggex Demo
该模式锚定整个匹配(它应该匹配整个字符串),它匹配1个或多个字母(
[a-zA-Z]+
),然后匹配'
或-
(由于['-]
)的 *0次或多次出现 *,后跟1+个字母。k5hmc34c2#
请使用以下命令:
Demo
ukdjmx9f3#