我正在解决此正则表达式问题
给出测试字符串s,在以下条件下编写与s匹配的RegEx:
必须以先生,夫人,女士或博士开头。
字符串的其余部分只能包含一个或多个英文字母(大写和小写)。
我使用了这种模式
Regex_Pattern = r'^(Mr|Mrs|Ms|Dr|Er)\..[A-Za-z]+$'
但该测试用例“ Ms._underscore”失败,然后我尝试使用此模式
Regex_Pattern = r'^(Mr|Mrs|Ms|Dr|Er)[\..][A-Za-z]+$'
它通过了所有测试用例,我无法找出区别。
答案 0 :(得分:3)
在这里,我们可以可视化表达式并检查:
我们可以看到\..
和[\..]
之间是有区别的。
.
,后跟任何字符。 .
或.
中的一个,它等于[.]
。jex.im可视化正则表达式:
答案 1 :(得分:1)
我认为您可能将两种模式颠倒了。第二个不匹配,第一个匹配:
^(Mr|Mrs|Ms|Dr|Er)\..[A-Za-z]+$
Demo 1
^(Mr|Mrs|Ms|Dr|Er)[\..][A-Za-z]+$
Demo 2
第二个字符使用字符类[\..]
,该字符类删除任何正则表达式标记的特殊含义(例如.
中的[]
匹配字面量而不是其特殊含义(任何字符)。
更新:您的模式也将匹配 Ms.underscore (标题和名称之间没有空格)。因此,请考虑以下模式,我认为该模式更适合您的需求:
^(Mr|Mrs|Ms|Dr|Er)\.[ _][A-Za-z]+$
Demo 3