C# 如何在其他带括号的字符串中匹配带嵌套括号的字符串?

C# 如何在其他带括号的字符串中匹配带嵌套括号的字符串?,c#,regex,C#,Regex,我有一个日志文件,试图从中提取特定部分: [2020][159]Debugging: [FIXED_RANDOM_324 - Some Text[R] Here[TM]][PRODUCTION1] - [192.0.0.1] - [Mozilla] [2021][532]Debugging: [FIXED_ABCDEF_21 - Simple][PRODUCTION2] - [192.0.0.32] - [Chrome] 我需要得到固定的\u RANDOM \u 324-一些文本[R]在这里[

我有一个日志文件,试图从中提取特定部分:

[2020][159]Debugging: [FIXED_RANDOM_324 - Some Text[R] Here[TM]][PRODUCTION1] - [192.0.0.1] - [Mozilla]
[2021][532]Debugging: [FIXED_ABCDEF_21 - Simple][PRODUCTION2] - [192.0.0.32] - [Chrome]
我需要得到固定的\u RANDOM \u 324-一些文本[R]在这里[TM]和固定的\u ABCDEF \u 21-简单

固定部分将始终保持不变

我试着使用像\[FIXED.*]\]这样简单的东西,但这只在最上面一行起作用。

你可以试试@FIXED.*.\][pattern:

演示:

结果:

编辑:如果我们想计算开始括号和结束括号,我们必须使用更精细的模式,例如

 @"FIXED(?:.*?(?<o>\[)?.*?(?<-o>\])?.*?)*(?=\])"
您可以尝试@FIXED.*???=\]\[模式:

演示:

结果:

编辑:如果我们想计算开始括号和结束括号,我们必须使用更精细的模式,例如

 @"FIXED(?:.*?(?<o>\[)?.*?(?<-o>\])?.*?)*(?=\])"

试试@FIXED.*.*.\]\[patternYes!成功了!你应该做一个答案,这样我就可以给你评分。试试@FIXED.*.*.*.*.\]\[patternYes!成功了!你应该做一个答案,这样我就可以给你评分了。但是它不能处理这样的情况,]后面没有直接跟[现在你提到它,FIXED\u XYZ\u 02-[Some][Text]不会正确匹配,但对我来说幸运的是,它可以充分处理99.9%的情况。@Kcoder:我明白了;如果[Some][Text]和类似的结构是问题所在,我们需要一个更详细的模式;我们通常使用漂白组来处理这个问题,即我们为每个操作匹配结束'][。请参阅我的编辑,但它不会处理以下情况]不是直接跟在[现在你提到了,FIXED_XYZ_02-[Some][Text]后面,它不会正确匹配,但幸运的是,它可以处理99.9%的情况。@Kcoder:我明白了;如果[Some][Text]和类似的结构是问题所在,我们需要一个更详细的模式;我们通常使用漂白组,即我们匹配结束']'对于每个操作[.请参见我的编辑
FIXED_RANDOM_324 - Some Text[R] Here[TM]
FIXED_ABCDEF_21 - Simple
 @"FIXED(?:.*?(?<o>\[)?.*?(?<-o>\])?.*?)*(?=\])"
  string[] tests = new string[] {
    "[2020][159]Debugging: [FIXED_RANDOM_324 - Some Text[R] Here[TM]][PRODUCTION1] - [192.0.0.1] - [Mozilla]",
    "[2021][532]Debugging: [FIXED_ABCDEF_21 - Simple][PRODUCTION2] - [192.0.0.32] - [Chrome]",
    "[2021][532]Debugging: [FIXED_XYZ_02 - [Some][Text]][PRODUCTION2] - [192.0.0.32] - [Chrome]",
    "[2021][532]Debugging: [FIXED_XYZ_02 - [Some][Text] more][PRODUCTION2] - [192.0.0.32] - [Chrome]",
  };

  Regex regex = new Regex(@"FIXED(?:.*?(?<o>\[)?.*?(?<-o>\])?.*?)*(?=\])");

  var result = tests
    .Select(test => regex.Match(test))
    .Where(match => match.Success)
    .Select(match => match.Value);

  Console.Write(string.Join(Environment.NewLine, result));
FIXED_RANDOM_324 - Some Text[R] Here[TM]
FIXED_ABCDEF_21 - Simple
FIXED_XYZ_02 - [Some][Text]
FIXED_XYZ_02 - [Some][Text] more