正则表达式对单个字符使用方括号

Regex using brackets for a single character

我正在解决这个正则表达式问题

Given a test string, s , write a RegEx that matches s under the following conditions:

s must start with Mr., Mrs., Ms., Dr. or Er.

The rest of the string must contain only one or more English alphabetic letters (upper and lowercase).

我使用了这个模式

Regex_Pattern = r'^(Mr|Mrs|Ms|Dr|Er)\..[A-Za-z]+$'

但是这个测试用例失败了"Ms._underscore",然后我尝试使用这个模式

Regex_Pattern = r'^(Mr|Mrs|Ms|Dr|Er)[\..][A-Za-z]+$'

它通过了所有测试用例,我无法找出区别。

在这里,我们可以可视化我们的表情并检查:

我们可以看出区别就在这里,在\..[\..]之间。

  • 在第一个中,我们说我们必须有一个 . 后跟任何字符。
  • 在第二种情况下,我们只想传递 .. 之一,它等于 [.].

Demo for second expression

正则表达式电路

jex.im 可视化正则表达式:

我想你可能把这两种模式颠倒了。第二个不匹配,第一个匹配:

^(Mr|Mrs|Ms|Dr|Er)\..[A-Za-z]+$
Demo 1

^(Mr|Mrs|Ms|Dr|Er)[\..][A-Za-z]+$
Demo 2

第二个使用字符 class [\..] 删除任何正则表达式标记的特殊含义(例如,[] 中的 . 匹配文字句点而不是其特殊含义(任何字符)。第一个模式匹配文字句点,后跟除换行符以外的任何单个字符。有关详细信息,请查看上面演示链接右侧的 "Explanation"。

更新:您的模式也将匹配 Ms.underscore(标题和名称之间没有 space)。因此,请考虑以下模式,我认为它更适合您正在寻找的内容:

^(Mr|Mrs|Ms|Dr|Er)\.[ _][A-Za-z]+$
Demo 3