如何通过正则表达式匹配以可选字符串结尾的值?

朱尔斯

我正在尝试从文本片段中提取一个名字,该文本片段可以选择在与以下相同的行中包含一个姓氏: <first_name>name<last_name>

例如:

Text: JohnnameSnow -> Result: John
Text: John -> Result: John

因此,我想<first_name>从该行中提取该部分,但如果没有name<last_name>,则应返回整行。

我已经尝试了以下正则表达式:

([A-zÀ-ÿ-]{2,})(?=(?:name))

如果同一行中确实有姓氏,那效果很好,但如果没有姓氏,则不会返回完整行。不幸的是,该解决方案似乎不像添加那样容易|$

我可以寻找可选的结尾词,如果没有出现,可以忽略它吗?

维克多·史翠比维

您可以使用

^(?<first>\p{L}+?)(?:name(?<last>\p{L}+))?$

请参阅regex演示输出:

在此处输入图片说明

细节

  • ^ -字符串开始
  • (?<first>\p{L}+?) -组“第一”:一个或多个字母,但尽可能少
  • (?:name(?<last>\p{L}+))? -可选的非捕获组:
    • name -子字符串
    • (?<last>\p{L}+) -组“最后”:一个或多个字母
  • $ -字符串结尾。

参见C#演示

var strings = new List<string> { "JohnnameSnow", "John" };
foreach (var s in strings)
{
    Console.WriteLine(s);
    var m = Regex.Match(s, @"^(?<first>\p{L}+?)(?:name(?<last>\p{L}+))?$");
    if (m.Success) 
    {
        Console.WriteLine("First name: {0}, Last name = {1}", m.Groups["first"].Value, m.Groups["last"].Value);
    }
    else
    {
        Console.WriteLine("No match!");
    }
}

输出:

JohnnameSnow
First name: John, Last name = Snow
John
First name: John, Last name = 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在golang正则表达式中匹配字符或字符串结尾?

正则表达式如何匹配可选字符

正则表达式在一个可选字符串上匹配非贪婪,而在另一个可选字符串上贪婪

正则表达式匹配字符串的可选结尾

JavaScript正则表达式以任意顺序匹配多个可选字符串

使用字符串开头和可选结尾的正则表达式多AND / OR单行匹配

正则表达式:精确匹配的字符串以特定字符结尾

如何通过正则表达式在kotlin中匹配双引号中的字符串

如何编写正则表达式,以匹配以特定内容开头或结尾的字符串部分

正则表达式匹配直到满足特定字符串或字符串结尾

正则表达式中间的可选字符串,后跟负向

如何编写与子字符串不匹配并以字符串结尾的正则表达式?

正则表达式:将可选字符串匹配到组

使用正则表达式对可选字符串进行Java字符串匹配

我如何通过遵循正则表达式来匹配字符串

如何通过正则表达式匹配/查找字符串

如何在正则表达式中匹配字符串的开头/结尾?

Python正则表达式中的可选字符串匹配

正则表达式,用于子字符串的可选结尾部分

匹配所有内容,直到可选字符串(Python正则表达式)

如何编写正则表达式以匹配以字母开头并以数字结尾的字符串

正则表达式匹配 > 跳过可选字符串

正则表达式匹配字符串数组和可选的字符串数组

Python正则表达式获取可选字符串之间的数字

正则表达式如何匹配贪婪捕获前面的可选字符?

如何确保所有正则表达式候选字符串都可以匹配

如何添加可选字符串或使用正则表达式结束字符串?

正则表达式匹配可选字符

Perl 正则表达式:如何获得多字节可选字符(?)匹配