You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式动态分组单词?附C#代码示例

正则表达式动态分组单词的实现方案

当然可以用正则表达式实现动态分组单词!先看看你当前代码的问题:你写的正则(?<=\d+)(.*)(?=md\.?)只会捕获数字到md/md.之间的所有内容,而且是一个整体组,没法把前后的名字拆分;另外.*是贪婪匹配,在复杂文本里可能会匹配到超出预期的内容。

针对你的示例文本(比如2 Elizabeth Winslow md. Gilbert Brooks、8 Rebekah Gulliver Stall md. George Leonard Dary),我们可以用命名捕获组来动态拆分md前后的名字部分,不管名字包含多少个单词都能正确捕获。

改进后的正则表达式

^\d+\s+(?<Spouse1>.*?)\s+md\.?\s+(?<Spouse2>.*)$

各部分解释:

  • ^\d+:匹配开头的数字(比如示例里的2、8)
  • \s+:匹配数字和名字之间的一个或多个空格
  • (?<Spouse1>.*?):非贪婪模式的命名分组,捕获md/md.之前的所有名字内容(不管有多少个单词)
  • \s+md\.?\s+:匹配md或md.,以及前后的空格
  • (?<Spouse2>.*):命名分组,捕获md/md.之后的所有名字内容
  • $:匹配字符串结尾,确保不会遗漏后面的内容

修改后的C#代码

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string strRegex = @"^\d+\s+(?<Spouse1>.*?)\s+md\.?\s+(?<Spouse2>.*)$";
        Regex myRegex = new Regex(strRegex, RegexOptions.None);
        
        // 测试示例文本
        string[] targetStrings = {
            @"2 Elizabeth Winslow md. Gilbert Brooks",
            @"8 Rebekah Gulliver Stall md. George Leonard Dary"
        };
        
        foreach (string strTargetString in targetStrings)
        {
            Match myMatch = myRegex.Match(strTargetString);
            if (myMatch.Success)
            {
                Console.WriteLine($"原始文本: {strTargetString}");
                Console.WriteLine($"配偶1: {myMatch.Groups["Spouse1"].Value}");
                Console.WriteLine($"配偶2: {myMatch.Groups["Spouse2"].Value}");
                Console.WriteLine("---");
            }
        }
    }
}

运行结果

原始文本: 2 Elizabeth Winslow md. Gilbert Brooks
配偶1: Elizabeth Winslow
配偶2: Gilbert Brooks
---
原始文本: 8 Rebekah Gulliver Stall md. George Leonard Dary
配偶1: Rebekah Gulliver Stall
配偶2: George Leonard Dary
---

注意事项

  • 使用.*?非贪婪匹配很关键,它会在遇到第一个md/md.时停止匹配,避免把后面的内容也包含进来
  • 命名分组让代码可读性更强,你可以根据需求修改分组名称(比如改成FirstName/SecondName)
  • 如果你的文本里md前后的空格数量不固定,\s+可以匹配一个或多个空格,适配不同格式

内容的提问来源于stack exchange,提问作者mecocopy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:53:22