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

如何用正则表达式提取单行文本中的多组文化标识与对应内容

正则提取文化标识与对应文本的解决方案

问题场景

我有一类类似键值对结构的文本:文化标识被方括号[]包裹,其后是对应文本(无明确终止符,文本可包含任意字符),示例如下:

示例1

[fr-FR] C'est la francais![en] This is english.[es-ES] Spain

示例2

[ad-sad]asd.,/?|":{{}[a!@#$%^&()**d [en]aedasd;

需要用正则表达式将文化标识提取为分组$1(去掉外层方括号),对应文本提取为分组$2,预期提取结果如下:

示例1预期结果

Group1 $1Group2 $2
fr-FRC'est la francais!
enThis is english.
es-ESSpain

示例2预期结果

Group1 $1Group2 $2
ad-sadasd.,/?
enaedasd;

我尝试过正向/反向预查、正/负断言、嵌套分组等方法均未成功,目前仅能提取分组1:(\[[\w-]+\]),也曾尝试(\[[\w-]+\])(?:(?!\[[\w-]+\]))但无效。备选方案是仅提取分组1,再通过C#代码利用匹配的index和length手动提取对应文本,现寻求正确的正则表达式解决方案。


正则表达式方案

可以通过正向预查结合非贪婪匹配实现需求,正则表达式如下:

\[([\w-]+)\](.*?)(?=\[[\w-]+\]|$)

表达式拆解

  1. \[([\w-]+)\]:匹配方括号包裹的文化标识,将括号内的内容捕获为分组$1(自动去除外层方括号)
  2. (.*?):非贪婪模式匹配任意字符,捕获为分组$2,非贪婪特性确保不会越界匹配到下一个文化标识的内容
  3. (?=\[[\w-]+\]|$):正向预查,匹配到下一个文化标识的开头或文本结尾时停止,作为$2的终止边界

C# 代码示例

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string sample1 = "[fr-FR] C'est la francais![en] This is english.[es-ES] Spain";
        string sample2 = "[ad-sad]asd.,/?|":{{}[a!@#$%^&()**d [en]aedasd;";
        string regexPattern = @"\[([\w-]+)\](.*?)(?=\[[\w-]+\]|$)";

        // 处理示例1
        Console.WriteLine("=== 示例1提取结果 ===");
        foreach (Match match in Regex.Matches(sample1, regexPattern))
        {
            Console.WriteLine($"Group1: {match.Groups[1].Value}, Group2: {match.Groups[2].Value.Trim()}");
        }

        // 处理示例2
        Console.WriteLine("\n=== 示例2提取结果 ===");
        foreach (Match match in Regex.Matches(sample2, regexPattern))
        {
            Console.WriteLine($"Group1: {match.Groups[1].Value}, Group2: {match.Groups[2].Value.Trim()}");
        }
    }
}

注意事项

  • 若文本包含换行符,需在Regex.Matches中添加RegexOptions.Singleline参数,让.可以匹配换行
  • 若文化标识包含\w和-之外的字符,可调整[\w-]部分,比如允许.则改为[\w-.]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:52:31