首页 > 解决方案 > 需要正则表达式帮助来匹配名称

问题描述

假设我有这三个名字

John Doe (p45643)
Le'anne Frank
Molly-Mae Edwards

我想匹配 1) John Doe 2) Le'anne Frank 3) Molly-Mae Edwards

我尝试过的正则表达式是

(^[a-zA-Z-'^\d]$)+

但它没有像我预期的那样工作。

我想帮助创建一个正则表达式模式:

从头到尾匹配名称,并且不能包含数字。每个“名称”可以包含的唯一允许值是 [a-zA-Z'-],因此如果名称是, J0hn那么它不应该匹配

标签: regex

解决方案


如果我正确理解了您的问题,那么您的正则表达式中有一个小错误:

(^[a-zA-Z-'^\d]$)+
         ^-------^------Here

上面指出的-应该转义或移到末尾,因为它用作范围字符。将+组标记为重复。

您可以改用此正则表达式(按照您之前的模式):

(^[a-zA-Z'^\d -]+$)

正则表达式演示

更新:供您发表评论。如果要单独匹配,则可以使用:

(\b[a-zA-Z'^\d-]+\b)

正则表达式演示

如果你只想匹配字符串(不是数字),那么你可以使用:

(\b[a-zA-Z'-]+\b)

正则表达式演示


推荐阅读