gpt4 book ai didi

c# - 使用正则表达式拆分名称

转载 作者:行者123 更新时间:2023-11-30 22:28:08 25 4
gpt4 key购买 nike

我正在尝试提出将拆分全名的正则表达式。

第一部分是验证 - 我想确保名称与模式“Name Name”或“Name MI Name”相匹配,其中 MI 可以是一个字符(可选)后跟一个句点。这会剔除复杂的名称,例如“Jose Jacinto De La Pena”——这很好。我想到的表达式是 ^([a-zA-Z]+\s)([a-zA-Z](\.?)\s){0,1}([a-zA- Z'-]+)$ 它似乎可以完成这项工作。

但我如何修改它以将名称分成两部分?如果存在中间首字母,我希望它成为第一个“名称”的一部分,换句话说,“James T. Kirk”应该拆分为“James T”。和“柯克”。 TIA。

最佳答案

只需添加一些括号

^(([a-z]+\s)([a-z](\.?))\s){0,1}([a-z'-]+)$

你的比赛现在将在第 1 组

string resultString = null;
try {
resultString = Regex.Match(subjectString, @"^(([a-z]+\s)([a-z](\.?))\s){0,1}([a-z'-]+)$", RegexOptions.IgnoreCase).Groups[1].Value;
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}

此外,我使正则表达式不区分大小写,这样您就可以缩短它(不是 a-zA-Z,而是 a-z)

更新 1

数字组在没有首字母的情况下效果不佳,所以我从头开始编写正则表达式

^(\w+\s(\w\.\s)?)(\w+)$

\w 代表任何单词字符,这可能是您需要的(如果效果更好,您可以将其替换为 a-z)

更新 2

C# 中有一个很好的功能,您可以在其中命名您的捕获

^(?<First>\w+\s(?:\w\.\s)?)(?<Last>\w+)$

现在您可以通过名称而不是数字来引用组(认为它更具可读性)

var subjectString = "James T. Kirk";
Regex regexObj = new Regex(@"^(?<First>\w+\s(?:\w\.\s)?)(?<Last>\w+)$", RegexOptions.IgnoreCase);

var groups = regexObj.Match(subjectString).Groups;
var firstName = groups["First"].Value;
var lastName = groups["Last"].Value;

关于c# - 使用正则表达式拆分名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com